亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
睢宁县| 佛山市| 京山县| 白水县| 天镇县| 瑞昌市| 龙门县| 资源县| 弋阳县| 沭阳县| 天镇县| 扎囊县| 上栗县| 绿春县| 遂平县| 集安市| 海淀区| 通许县| 尼玛县| 沙河市| 巴林左旗| 五莲县| 浑源县| 柘荣县| 上思县| 景洪市| 博罗县| 佛山市| 定远县| 图们市| 柳江县| 五常市| 夹江县| 花垣县| 安图县| 元朗区| 河池市| 金湖县| 阿合奇县| 宁南县| 武平县|