堆排序總結

2021-10-22 13:54:00 字數 1409 閱讀 6963

:孩子節點總是小於(或大於)父節點的完全二叉樹

時間複雜度: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的所有結點依次 下墜 調整 自底向上處理分支結點 調整規則 小元素逐層 下墜 與關鍵字更大的孩子交換 排序 將棧頂元素...