JS演算法4 排序 堆排序

2021-09-11 09:45:59 字數 1137 閱讀 9076

堆:

是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。

堆排序:

是指利用堆這種資料結構所設計的一種排序演算法

heapinsert(arr,index) 增大堆結構

先建立大根堆,這是乙個往上走的過程,進來的元素與父元素比,大了就往上走,此時陣列仍為無序陣列

最大的在根位置上,將最大的和最後那個小的做交換,此時最大的這個在根中失效,從堆**來,長度-1

heapify(arr,index,heapsize) 縮小堆結構

重新調整大根堆,小的此時在0位置上,這是乙個往下沉的過程,它要跟兩個孩子比,所以要先找到孩子裡大的,再跟這個大的作比較,小了就往下走小的此時在0位置上,重新調整大根堆,這是乙個往下沉的過程,它要跟兩個孩子比,所以要先找到孩子裡大的,再跟這個大的作比較,小了就往下走

不斷將大的拿出,得到有序陣列

//時間複雜度是o(nlogn)

var arr =[8

,6,4

,7,1

];function

heapsort

(arr)

//1.先建立大根堆

for(

var i=

0; i)var heapsize = arr.length;

位置上的和最後乙個做交換,最後乙個出來,也就是最大的那個,長度-1

swap

(arr,0,

--heapsize)

;while

(heapsize >0)

}function

heapinsert

(arr,index)

}function

heapify

(arr,index,heapsize)

swap

(arr,largest,index)

; index = largest;

left = index *2+

1;}}

function

swap

(arr,i,j)

heapsort

(arr)

;console.

log(arr)

;

8 排序演算法 堆排序

堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法 堆排序的平均時間複雜度為 nlogn 1.演算法步驟 建立乙...

007 排序演算法 堆排序

一 概述 堆排序 英語 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。排序方法 時間複雜度 平均 時間複雜度 最壞 時間複雜度 最好 空間複雜度 穩定性堆排序 o nlogn o...

alg4 排序 堆排序

堆排序可以分為兩個階段。在堆的構造階段中,我們將原始陣列重新組織安排進乙個堆中 然後在下沉排序階段,我們從堆中按遞減順序取出所有元素並得到排序結果。堆的構造 從右至左用sink 函式構造子堆。陣列的每個位置都已經是乙個子堆的根結點了,sink 對於這些子堆也適用。如果乙個結點的兩個子結點都已經是堆了...