wrongwrongな開発日記

情報系大学院生の忘備録

【Golang】簡単なQuickSortを書いてみた

wrongwrong163377.hatenablog.com
この記事のQuickSortのコードの門番には間違いがあるので訂正しました。

背景

何かを作るようなやる気は起きないけどプログラムは組んでたい気分だったので、前々から触ってみたかったGolangでQuickSortを書いてみました。

何で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]

感想

最近VBを触りまくっているせいでセミコロンが自然に出てこない感じになってます。そんな状態でGolangを始めましたが、セミコロンが無いのはやりやすかったですね。
途中「え?」ってなるような部分も結構有りましたが、まあそれはそれとして……。
後で並列処理周りにも手を出してみたいと思います。