排序--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