アルゴリズムとデータ構造 - 挿入ソート

アルゴリズムとデータ構造

概要

アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。

実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。

挿入ソート

  • データ列の先頭から順番にソートしていく
  • ソート済みと未ソートでそれぞれ部分列に分けられる
    • 1回目:0番目をソート済みとするので何もしない
    • 2回目:0番目と1番目を比較して順序が逆なら入れ変える
    • 3回目:0番目から1番目までのデータ列と比較、順序入れ替え
    • 4回目:0番目から2番目までのデータ列と比較、順序入れ替え
    • 以下、未ソート部分がなくなるまで繰り返す

計算時間

  • O(n²)

実装

package main

import "fmt"

func insertionSort(n []int) []int {
    for i := 1; i < len(n); i++ {
        for j := 0; j < i; j++ {
            if n[i-j-1] > n[i-j] {
                n[i-j-1], n[i-j] = n[i-j], n[i-j-1]
            } else {
                break
            }
        }
    }

    return n
}

func main() {
    n := []int{2, 1, 5, 7, 9}
    fmt.Println(insertionSort(n))
}
  • 要素を順番に処理していって、スワップするだけなので単純。

参考


関連書籍