JAVA语言之堆排序

来源:互联网 发布:苹果助手软件下载 编辑:程序博客网 时间:2024/06/15 08:32

实现的是大根堆

代码如下:

public static int[] heapSort(int[] A, int n) {//先建立一个大根堆A=getDui(A);//进行一个个的排序拖出从根顶开始for(int i=n-1;i>0;i--){int t=A[0];A[0]=A[i];A[i]=t;//每次从根底取值然后长度-1然后进行大根堆的化简adjustHead(A, 0, i);}return A;} public static int[] getDui(int[] A){for(int i=A.length/2;i>=0;i--){ adjustHead(A,i,A.length); //每一个i都是根节点的值}return A;} public static void adjustHead(int[] A,int k,int n){    int tem=A[k];//每次保留根节点    for(int i=2*k+1;i<n;i=2*i+1){//此时i表示的是当前根节点k下的左结点        if(i!=n-1 && A[i]<A[i+1]){        i++;//根节点下面的左结点比右节点小,则i就要+1;        }        if(tem>A[i]){//这里是判断根节点和下面的左结点或者右节点进行比较        break;        }else{//如果根不大于的话则又要进行下一层的比较        A[k]=A[i];        //所以这里有        k=i;//再进行k=i作为根节点的一层,当然i和k都小于长度n        }    }    A[k]=tem;}


0 0