堆:孩子節點總是小於(或大於)父節點的完全二叉樹
時間複雜度:o(nlogn)
步驟:
建立堆(從完全二叉樹最後乙個內部節點向前執行堆調整)
交換堆首位,堆尺寸-1
對新堆的堆首執行堆調整
重複執行第三步直到堆尺寸為0
// 初始化資料
var numbers =
;for
(var i =
0; i <
20; i++
)console.
log(
json
.stringify
(numbers)
)function
swap
(numbers, i, j
)// 堆調整
function
heapadjust
(numbers, point, size
)// 將內部節點與最大的孩子節點交換
var leftp = point *2,
rightp = leftp +1,
largestp = point;
if(numbers[leftp]
> numbers[largestp])if
(rightp < size && numbers[rightp]
> numbers[largestp])if
(largestp != point)
}// 建立最大堆
for(
var i = math.
floor
(numbers.length /2)
; i >=
0; i--
)console.
log(
json
.stringify
(numbers)
)// 排序輸出
for(
var i = numbers.length -
1; i >=
0; i--
)console.
log(
json
.stringify
(numbers)
)
[56,61,18,86,13,72,31,75,76,56,21,87,71,68,99,10,51,11,55,32][99,87,76,86,56,72,71,75,51,56,21,18,31,68,61,10,13,11,55,32]
[10,11,13,18,21,31,32,51,55,56,56,61,68,71,72,75,76,86,87,99]
排序總結 堆排序
created by liyuanshuo on 2017 3 17.include heap sort.h 堆的定義 kik 2i k i k 2i 1 若以一維陣列儲存堆,則堆對應乙個完全二叉樹,並且所有的非葉節點的值均不大於 或者不小於 其子女的值 根節點 堆頂元素 的值是最小的 或者最大的 ...
堆排序總結
在面試中遇到要你手寫堆排序,可以先詢問是否可以使用stl中建堆的演算法,問清楚面試官的意圖之後方可動手寫 交流最重要。heap並不屬於stl元件,是乙個幕後英雄,stl實現了最大堆,預設的元素比較方式是less,如果要使用小根堆,則將比較方式設定為greater,並用來作為priority queu...
堆排序總結
演算法基於順序儲存的 完全二叉樹 結點i的左孩子是2i 右孩子是2i 1 父節點是i 2 編號小於n 2的結點都是分支結點。大根堆 根 左 右 小根堆 根 左 右 建堆 編號 n 2的所有結點依次 下墜 調整 自底向上處理分支結點 調整規則 小元素逐層 下墜 與關鍵字更大的孩子交換 排序 將棧頂元素...