堆排序

来源:互联网 发布:网游年龄数据库 编辑:程序博客网 时间:2024/06/18 18:19

        堆排序我个人觉得是8大排序里边最难的一个,因为它不仅仅是一个排序算法,还涉及到一种常用的数据结构,大根堆。这是一个面试最容易问到的排序,因为它涉及到的知识点非常多,下面就对堆排序做一个总结。

        首先堆排序,从算法的角度出发,分为3步:

        第一步:构建初始的大根堆

                      public static int[] buildMaxHeap(int[] array){

                      for(int i = (array.length-2)/2;i>=0;i--){

                           adjustDownToUp(array,i,array.length);

                      }

                      }

        第二步:编写构建大根堆的adjustDownToUp方法

                      public static void adjustDownToUp(int [] array,int k,int length){

                      int temp = array[k];

                      for(int i = 2*k+1;i<length-1;i = 2*i+1){

                           if(array[i]>a[i+1]) i++;

                           if(temp>a[i]) break;

                           else{

                                  array[k] = array[i];

                                  k = i;

                           }

                     }

                     array[k] = temp;

                     }

        第三步:编写heapSort主方法

                      public static void heapSort(int[] array){

                      array = buildMaxHeap(array);

                      for(int i = array.length - 1;i>=1;i--){

                           int temp = array[0];

                           array[0] = array[i];

                           array[i] = temp;

                           adjustDownToUp(array,0,i);

                      }

                      }

      以上就是堆排序的所有代码过程,详细的介绍我觉得以下文章写得不错

      http://www.cnblogs.com/CherishFX/p/4643940.html

      

      

      

0 0