必學經典演算法之 堆排序

2021-08-20 00:14:10 字數 996 閱讀 6611

n個元素的序列,當且僅當滿足以下關係時,稱之為堆。

建堆:將n個元素建成堆。

排序:輸出堆頂元素後,調整剩餘元素,使之成為大根堆;繼續輸》出堆頂,繼續調整,依此類推。

(一)篩選:調整堆使之成為大根堆或小根堆

輸出堆頂元素後,將堆底元素送入堆頂,由於根結點不滿足堆的性質,此時堆被破壞,而根結點的左右子樹仍然是堆。然後,將根結點與左右子樹,較大或者較小的進行比較。如果與左子樹交換,左子樹破壞;如果與右子樹交換,右子樹破壞。繼續對不滿足堆性質》的子樹就行上述操作,直到葉子結點。

排序的過程就是不斷輸出堆頂並進行篩選的過程。

(二)建堆:建堆的過程就是從底向上對每乙個非葉子結點進行一次篩選即可。

每輸出一次堆頂元素需要進行一次調整,每次調整需要的比較次數》為logn,時間複雜度o(logn),n次輸出總共需要的比較次數為o(nlogn)。

空間複雜度為o(n)。

public class heapsort 

if (temp < arr[i]) else

}arr[low] = temp;

system.out.println("adjust:"+json.tojsonstring(arr));

}public static void heapsort(int arr)

system.out.println("done");

//排序,輸出頭節點,把最後葉子結點的值賦值給頭節點,調整

for (int i = n - 1; i > 0; i--)

}public static void main(string args) ;

heapsort(arr);

system.out.println(json.tojsonstring(arr));}}

必學經典演算法之 氣泡排序

氣泡排序屬於交換類排序,兩兩比較,而後交換。排序過程如下 首先對位置0 n的資料從左到右兩兩比較,大的放後面,經過一輪的操作,n位置存放的是最大的數字 之後對位置0 n 1的資料從左到右兩兩比較,大的放後面,經過一輪的操作,n 1位置存放的是最大的數字 以此類推。o n 2 對於乙個int陣列,請編...

經典演算法之堆排序

author s email wardseptember gmail.com date 2017.12.5 堆排序 堆是一種資料結構,可以把堆看成一棵完全二叉樹,這棵樹滿足 任何乙個非葉子 結點的值都不大於 或不小於 其左右孩子結點的值。若父親大 孩子小,則這樣的堆 叫做大頂推 若父親小 孩子大,則...

經典演算法之堆排序

以堆的方式去排序,使最大值位於根節點,之後就縮小尺寸,調整位置。時間複雜度o n logn 不是很穩定 1.建立乙個堆 2.把堆首最大值和堆尾互換位置 3.縮小堆尺寸,調整位置 4.重複 直至堆尺寸為1 private int heapsort int source return arr priva...