1.5 堆排序
堆排序(heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。
核心思路:
1、depth := length/2 - 1 //節點深度,n,2n+1,2n+2
2、遞迴思想,找出最大值放在根節點首位,之後首尾交換位置
1.5.2 演算法描述
1.5.3 **演示
1.5.4 **實現
package main
import "fmt"
func heapsort(arr int) int
"ex", arr)
} return arr
}func heapscortmax(arr int, length int) int else
if right <= length-1 && arr[right] > arr[topmax]
if topmax != i
} return arr }}
func main()
fmt.print(heapsort(arr))
}
參考**: 演算法 堆排序(go實現)
照舊,老鐵先開始講理論 理論 堆排序,就是根據大頂堆的特性 父節點總是大於子節點,則root節點就是堆中的最大數值,所以只要每次取出root節點,就可以完成排序。so,依然是迴圈排序,迴圈內分兩步走 第一步 將陣列按大頂堆結構排列 第二步 取出堆頂資料 第一步 將剩餘陣列按大頂堆結構排列 第二部 取...
排序演算法 堆排序
1 什麼是堆 首先它是一顆完全二叉樹,並且父結點的值大於子節點的值 最大堆 或父結點的值小於子結點的值 最小堆 小根堆 根結點 亦稱為堆頂 的關鍵字是堆裡所有結點關鍵字中最小者的堆稱為小根堆,又稱最小堆。大根堆 根結點 亦稱為堆頂 的關鍵字是堆裡所有結點關鍵字中最大者,稱為大根堆,又稱最大堆。2 堆...
排序演算法 堆排序
花了一晚上時間研究堆排序,這個排序困擾了哥很久,終於搞清楚了。一 堆的定義 1.父結點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值 2 每個結點的左子樹和右子樹都是乙個二叉堆 都是最大堆或最小堆 二 已知結點 i 則它的子結點 為2 i 1 與 2 i 2 父節點為 i 1 2 三 堆排序...