堆排序

来源:互联网 发布:linux xargs cat命令 编辑:程序博客网 时间:2024/06/02 00:31
public class 堆排序 {
   public  static void main(String[] args)
       {
           int[] arr = { 0, 9, 4, 3, 8, 6 ,12};
           
           HeapSort(arr);
           for (int i : arr) {
            System.out.println(i);
}
       }


       // 堆排序的方法
public static void HeapSort(int[] a)
{
    int n = a.length  - 1;
    
    // 循环
    while (n > 1)
    {
        for (int k = n/2; k > 0; k--)
        {
            // 建立大根堆  堆顶元素最大
            if (a[k] <= a[2 * k])
            {
                // 交换
                int temp = a[k];
                a[k] = a[2 * k];
                a[2 * k] = temp;
            }
            if (2 * k + 1 <= n && a[k] <= a[2 * k + 1])
            {
                // 交换
                int temp = a[k];
                a[k] = a[2 * k + 1];
                a[2 * k + 1] = temp;
            }
            // 堆顶元素 a[1] 与最后一个交换
        }
        


        // a[n]与啊a[1]交换
        int s = a[1];
        a[1] = a[n];
        a[n] = s;


        n--;
    }
}
}