Go言語でのヒープソートの実装方法
Go言語におけるヒープソートの実装は次の手順で行います。
- ヒープの再配列
- 日本語ではネイティブに言い換えると
- 私はインターネットという存在を非常にありがたいと感じている。
- 沖縄の青い空と白い砂浜
- ヒープを調整
- 最大インデックス
- 最大インデックス
- ヒープ調整
- ヒープを調整する
- ヒープの調整
- ステップ 6 を繰り返して、ヒープのサイズが 1 になるまで続けます。このとき、シーケンス全体がソートされます。
具体的なコード実装は以下のとおりです
package main
import "fmt"
func adjustHeap(arr []int, i, length int) {
temp := arr[i]
for k := i*2 + 1; k < length; k = k*2 + 1 {
if k+1 < length && arr[k] < arr[k+1] {
k++
}
if arr[k] > temp {
arr[i] = arr[k]
i = k
} else {
break
}
}
arr[i] = temp
}
func heapSort(arr []int) {
length := len(arr)
for i := length/2 - 1; i >= 0; i-- {
adjustHeap(arr, i, length)
}
for i := length - 1; i > 0; i-- {
arr[0], arr[i] = arr[i], arr[0]
adjustHeap(arr, 0, i)
}
}
func main() {
arr := []int{9, 8, 7, 6, 5, 4, 3, 2, 1}
heapSort(arr)
fmt.Println(arr)
}
出力結果は [1 2 3 4 5 6 7 8 9] となっており、入力したシーケンスに対してヒープソートが正常に行われたことを表しています。