wrongwrong163377.hatenablog.com
この記事のQuickSortのコードの門番には間違いがあるので訂正しました。
背景
何かを作るようなやる気は起きないけどプログラムは組んでたい気分だったので、前々から触ってみたかったGolangでQuickSortを書いてみました。
ソースコード
Quickソート本体は以下の通りです。
ピボットより小さいかそうでないかで分けて再帰、配列の長さが一定以下になれば並べなおしてリターンする感じです。
func qsort(arr []int) []int{ //門番 if len(arr) < 2{ if len(arr) <= 1 || arr[0] <= arr[1]{ return arr }else { return []int {arr[1], arr[0]} } } var piv int = arr[0] var small []int var big []int for i:=1;i<len(arr);i++{ if piv > arr[i] { small = append(small, arr[i]) }else { big = append(big, arr[i]) } } return append(append(qsort(small), piv), qsort(big)...) }
実行結果
0から100までの32個の乱数に対して実行した結果が以下です。
[28 73 50 20 89 55 83 0 64 47 61 34 23 31 42 7 99 80 80 4 2 87 99 59 33 4 86 47 70 88 0 16] [0 0 2 4 4 7 16 20 23 28 31 33 34 42 47 47 50 55 59 61 64 70 73 80 80 83 86 87 88 89 99 99]