堆排序

Posted 没有梦想的小灰灰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。

public class 堆排序 {
    void HeapSort(int[] arr) {
        for(int i = arr.length / 2; i >= 0; i--) {
            HeapAdjust(arr, i, arr.length - 1);
        }
        for(int i = arr.length - 1; i > 0; i--) {
            swap(arr, 0, i);
            HeapAdjust(arr, 0, i - 1);
        }
    }
    
    private void HeapAdjust(int[] arr, int s, int m) {
        int temp = arr[s];
        for(int j = 2 * s; j <= m; j *= 2) {
            if(j < m && arr[j] < arr[j + 1])
                ++j;
            if(temp >= arr[j])
                break;
            arr[s] = arr[j];
            s = j;
        }
        arr[s] = temp;
    }
    
    private void swap(int[] arr, int a, int b) {
        arr[a] = arr[a] ^ arr[b] ^ (arr[b] = arr[a]);
    }
    public static void main(String[] args) {
        int[] arr = {90,70,80,60,10,40,50,30,20};
        堆排序 s = new 堆排序();
        s.HeapSort(arr);
        for(int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

    }

}

 

以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章

选择排序(简单选择排序堆排序的算法思想及代码实现)

排序--08---堆排序

python代码实现堆排序

算法-java代码实现堆排序

一文带你了解堆排序

堆排序