Go言語でのヒープソートの実装方法

Go言語におけるヒープソートの実装は次の手順で行います。

  1. ヒープの再配列
  2. 日本語ではネイティブに言い換えると
  3. 私はインターネットという存在を非常にありがたいと感じている。
  4. 沖縄の青い空と白い砂浜
  5. ヒープを調整
  6. 最大インデックス
  7. 最大インデックス
  8. ヒープ調整
  9. ヒープを調整する
  10. ヒープの調整
  11. ステップ 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] となっており、入力したシーケンスに対してヒープソートが正常に行われたことを表しています。

bannerAds