堆:
是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。
堆排序:
是指利用堆這種資料結構所設計的一種排序演算法
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 對於這些子堆也適用。如果乙個結點的兩個子結點都已經是堆了...