堆排序

来源:互联网 发布:淘宝认证在哪里 编辑:程序博客网 时间:2024/06/06 07:41

public classMain {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        int test[] ={0,-1,78,22,45,-100};

        HeapSort(test);

        for(inti = 0;i<test.length;i++){

          

           System.out.println(test[i]);

        }

    }

   

    public static void HeapSort(intvalues[]){

       

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

           MinHeapFiexDown(values,i,values.length);

        }

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

           Swap(values,i,0);

           MinHeapFiexDown(values,0,i);

        }

    }

    // i节点开始调整,n为节点总数,0开始计算i节点的子节点为:2*i+1,2*i+2

    @SuppressWarnings("unused")

    private static void MinHeapFiexDown(inta[],inti,intn){

       

        int j,temp;

        temp = a[i];

        j = 2*i+1;

        while(j <n){

          

           // 在左右孩子中获取最小的

           if(j + 1 <n  && a[j + 1] <a[j]) j++;

           if(a[j] >=temp) break;

          

           a[i] =a[j];

           i = j;

           j = 2 * i + 1;

        }

        a[i] =temp;

    }

    @SuppressWarnings("unused")

    private static void Swap(intvalues[],intaIdx,intbIdx){

       

        int temp = values[aIdx];

        values[aIdx] =values[bIdx];

        values[bIdx]  =temp;

    }

}

//输出结果:

78

45

22

0

-1

-100

0 0
原创粉丝点击