中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
民丰县| 云和县| 大余县| 广元市| 辰溪县| 邹平县| 公主岭市| 南丰县| 嫩江县| 宜兰市| 汨罗市| 商河县| 湖州市| 宜宾市| 浦城县| 小金县| 朔州市| 兴国县| 镇康县| 柞水县| 灵石县| 昌乐县| 左贡县| 柳州市| 龙州县| 海盐县| 霸州市| 曲沃县| 甘南县| 富蕴县| 南岸区| 自治县| 平顶山市| 合山市| 神池县| 永泰县| 山阴县| 梁河县| 九江市| 司法| 象州县|