從尾部到首部進行遍歷。
將第0個節點到第i個節點進行大頂堆構建。
不斷的比較第i個節點的父節點與子節點,若父節點大於子節點則進行交換。
進行i–操作繼續交換,直到完成大頂堆構建。
每完成一次大頂堆構建,就將第0個元素與第i個元素進行交換。
public
class
heapsort
;sort
(arr)
; system.out.
println
(arrays.
tostring
(arr));
}static
void
sort
(int
arr)
}/**
* 進行大頂堆構建
* @param arr
* @param i
*/static
void
maxheap
(int
arr,
int i)
// 找出子節點較大的元素,若大於父節點則進行交換
if(arr[parent]
< arr[child])}
}static
void
swap
(int
arr,
int parent,
int child)
}
八大排序演算法 堆排序
排序,分為內部排序和外部排序,內部排序是指將資料記錄在記憶體中進行排序,而外部排序因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存,所以稱之為外部排序,我們這裡講的八大排序全部屬於內部排序。堆排序 heapsort 是指利用堆積樹 堆 這種資料結構所設計的一種排序演算法,它是選...
八大排序之堆排序
public class heapsort heapsort num,num.length for int i 0 i 0 i heapadjust array,i,length 從最後乙個元素開始對序列進行調整,不斷的縮小調整的範圍直到第乙個元素 for i length 1 i 0 i priv...
八大排序之堆排序
public static void heapsort int arr for int i 0 i arr.length i int size arr.length 堆中用size表示長度 swap arr,0,size while size 0 用 3 0 1 5 2 畫圖,過程清晰。陣列最後插入...