91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

go語言堆排序怎么實現

小億
95
2023-10-22 03:21:38
欄目: 編程語言

Go語言堆排序的實現步驟如下:

  1. 首先,定義一個用于進行堆調整的函數 adjustHeap,該函數接受三個參數:待調整的切片 arr,當前需要調整的節點的下標 i,以及堆的大小 length
  2. adjustHeap 函數中,首先獲取當前節點的值,然后計算出其左子節點和右子節點的下標。
  3. 比較左子節點和右子節點的值,取較大值的下標作為 maxIndex
  4. 判斷當前節點與其子節點的大小關系,如果當前節點的值小于 maxIndex 所對應的子節點的值,則交換兩者的值,并遞歸調用 adjustHeap 函數,以保證堆的性質。
  5. 在主函數中,首先構建一個初始堆,通過調用 adjustHeap 函數來從最后一個非葉子節點開始進行堆調整。
  6. 將堆頂元素與最后一個元素交換,然后將堆的大小減一,并調用 adjustHeap 函數對堆頂元素進行調整,以保持堆的性質。
  7. 重復步驟 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],表示已經成功對輸入的序列進行了堆排序。

0
昭通市| 武功县| 永寿县| 厦门市| 合江县| 新竹县| 东莞市| 嘉峪关市| 六枝特区| 乃东县| 汝州市| 竹溪县| 耒阳市| 嵊泗县| 澜沧| 双牌县| 潞城市| 始兴县| 修水县| 卓资县| 汤阴县| 邛崃市| 公主岭市| 曲沃县| 平阳县| 晴隆县| 满洲里市| 巢湖市| 泸西县| 怀柔区| 托克托县| 崇明县| 阳新县| 社旗县| 滨州市| 云梦县| 汪清县| 昌平区| 钟山县| 襄城县| 桦甸市|