分享

堆排序

 Dragon_chen 2017-05-09
把数组转换成堆,一个一个删除最小值存储起来。代码如下,存储元素由于从0开始,所以下滤(percolatDown)的时候0要额外判断。源码如下。
public class Test {
private static int currentSize;
public static void main(String[]args) {
int []is= {0,3,52,33,1,2,4,6,9,7,3,6,3,4,2,78,54,67,398,5};
currentSize = is.length -1;
          buildHeap(is);
          for(int i=0;i<is.length;i++)
          {
         System.out.println(deleteMin(is));
          }
//         heapSort(is);
//          for(int i=0;i<is.length;i++)
//          {
//         System.out.println(is[i]);
//          }
    }
public static void buildHeap(int []is)
{
for(int count = currentSize/2;count>=0;count--)
{
            percolateDown(count, is);
}
}
private static void percolateDown(int index,int []is) {
int child = index;
while(child<currentSize)
{
child =child*2+1;
if(child<currentSize||child==1){
if(is[child]<is[child+1])
{
child++;
}
else 
{
}
if(is[child]>is[index])
{
int s = is[child];
is[child] =  is[index];
is[index] = s;
index =child;
}
}
}
}
public  static int deleteMin(int []is)
{
int min = is[0];
is[0] = is[currentSize--];
percolateDown(0, is);
return min;
}
public static void  heapSort(int []is) {
for(int i=0;i<is.length;i++)
     {
      int x = deleteMin(is);
      is[currentSize+1]=x;
     }
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多