排序--HeapSort 堆排序

  堆 排 序  html


  堆排序。就是經過堆結構來排序。能夠看以前寫的http://www.cnblogs.com/robsann/p/7521812.html 。關於堆的結構java

  堆排序先要使結構堆有序。因此要先使全部的小堆有序,小堆一點一點加入先的元素。最後整個堆有序。解圖。假設你有git

  以下數組對象github

  [ 2 ][ 4 ] [ 5 ] [ 11 ][ 0 ] [ 7 ] [ 8 ]變成堆的樣子就是  數組

    

  如今這個堆是無序的。首先要讓堆變得有序。性能

           

  咱們先把右邊這個子數變得有序(加深顏色的那個樹)。ui

    

  再把左邊那個子數也變的有序.以下 因此2 11爲root的數 和 8 爲root的數是已經堆有序了。接着咱們再把2爲root的樹變得有序spa

    

  最後變成以下的樣子。htm

    

  如今咱們知道11是最大的,咱們能夠很輕鬆的把11放在數組最末尾的位置表面11是最大的,11 已經排好了位置。對象

  

  接下來咱們就能夠不用管11了。由於11是全部數裏面最大的,並且已經找到了本身的位置。

  

  如今的有序被破壞了。因此咱們必須再次讓堆有序。變成以下

    

  這個時候天然而然就能夠知道8是 除 11外最大的數。 全部把8放到數組末尾第二個位置

  

  一直進行這樣子的操做,就能夠排序數組了。

  分析  

  雖然堆排序的Time  proportional to NLg(N) 可是由於堆的比較次數不少,性能不及QuickSort和megeSort

  代碼

  https://github.com/Cheemion/algorithms/blob/master/src/com/algorithms/sort/HeapSort.java

相關文章
相關標籤/搜索