堆排序

        堆排序我个人觉得是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

      

      

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值