您的位置:首页 > 其它

HeapSort

2007-09-01 16:37 337 查看

class  Test




...{//堆采用顺序表(一维数组)存储表示


    public static void main(String[] args) 




    ...{




        int a[]=...{0,49,38,65,97,76,13,27,49};


        HeapSort(a);


        for(int i=1;i<a.length;i++)


        System.out.print(a[i]+" ");


    }


    public static void HeapAdjust(int a[],int s,int m)




    ...{//已知H.r[s..m]中记录的关键字除H.r[s].key之外均满足堆的定义,本函数调整H.r[s]


     //的关键字,H.r[s..m]成为一个大顶堆


        int rc=a[s];


        int j;




        for(j=2*s;j<m;j*=2)...{//沿key较大的孩子结点向下筛选


            if(j<m&&max(a[j],a[j+1]))++j;//j为key较大的记录的下标


            if(!max(rc,a[j]))break;      //rc应插入在位置s上            


            a[s]=a[j];s=j;


        }


        a[s]=rc;                         //插入


    }


    public static void HeapSort(int a[])




    ...{


        //对顺序表H进行堆排序


        int i;


        for(i=a.length/2;i>=1;--i)      //把H.r[1..H.length]建成大顶堆


            HeapAdjust(a,i,a.length-1);            


        for(i=a.length-1;i>=1;--i)




        ...{


            int tmp=a[1];              //将堆顶记录和当前未经排序子序列Hr[1..i]中


            a[1]=a[i];                 //最后一个记录相互交换


            a[i]=tmp;                  


            HeapAdjust(a,1,i-1);       //将H.r[1..i-1]重新调整为大顶堆            


        }


    }


    public static boolean max(int a,int b)




    ...{


        return a>b;


    }


}



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string class 存储