堆排序

package leetcode.sort;

import java.util.Arrays;
import java.util.Random;

/**
 * HeapSort
 * Created by blank on 15/8/12.
 */
public class HeapSort {
    public static void main(String[] args) {
        int[] arr = new int[100000];
        for (int i = 0; i < 100000; i++) {
            arr[i] = new Random().nextInt(100000000);
        }
        int[] copy = arr.clone();
        heapSort(arr);
        Arrays.sort(copy);
        for (int i = 0; i < 100000; i++) {
            if (arr[i] != copy[i]) {
                System.out.println("wrong");
            }
        }
        System.out.println("right");
    }

    static void heapSort(int[] array) {
        if (array == null || array.length <= 1) {
            return;
        }
        for (int i = (array.length - 1) / 2; i >= 0; i--) {
            siftDown(array, i, array.length);
        }
        for (int i = array.length - 1; i >= 0; i--) {
            swap(array, i, 0);
            siftDown(array, 0, i);
        }
    }

    private static void swap(int[] array, int a, int b) {
        if (a >= array.length || b >= array.length) {
            return;
        }
        int tmp = array[a];
        array[a] = array[b];
        array[b] = tmp;
    }

    private static void siftDown(int[] array, int root, int hi) {
        int half = hi >>> 1;
        while (root < half) {
            int child = root * 2 + 1;
            if (child >= hi) {
                return;
            }
            if (child + 1 < hi && array[child + 1] > array[child]) {
                child++;
            }
            if (array[child] < array[root]) {
                return;
            }
            swap(array, root, child);
            root = child;
        }
    }

}
原文地址:https://www.cnblogs.com/aboutblank/p/4828547.html