堆排序

Posted weishao-lsv

tags:

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

 

   public static int[] heapSort(int[] arr) {
        int i;
        for (i = arr.length / 2; i >= 0; i--) {
            heapAdjust(arr, i, arr.length - 1);
        }
        for (i = arr.length - 1; i > 0; i--){
            swap(arr, 0, i);
            heapAdjust(arr, 0, i - 1);
        }
        return arr;
    }

    private static void heapAdjust(int[] arr, int s, int m) {
        int temp, j;
        temp = arr[s];  
        for (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 static void swap(int[] arr, int heigh, int low) {
        int temp = arr[heigh];
        arr[heigh] = arr[low];
        arr[low] = temp;
    }

 

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

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

排序--08---堆排序

python代码实现堆排序

算法-java代码实现堆排序

一文带你了解堆排序

堆排序