快速排序

public class QuickSortUtil {

    public static void sort(int[] array) {
        sort(array, 0, array.length - 1);
    }

    private static void sort(int[] array, int start, int end) {
        if (end - start <= 10) {
            insertSort(array, start, end);
        } else {
            int pivot = getPivot(array, start, end);
            int partion = partionArray(array, start, end, pivot);
            sort(array, start, partion - 1);
            sort(array, partion + 1, end);
        }
    }

    private static void insertSort(int[] array, int start, int end) {
        for (int out = start + 1; out <= end; out++) {
            int temp = array[out];
            int in;
            for (in = out;in > start && array[in - 1] >= temp;in--) {
                array[in] = array[in - 1];              
            }
            array[in] = temp;
        }
    }

    private static int getPivot(int[] array, int start, int end) {
        int center = (start + end) / 2;
        if (array[start] > array[end]) {
            swap(array, start, end);
        }
        if (array[start] > array[center]) {
            swap(array, start, center);
        }
        if (array[center] > array[end]) {
            swap(array, center, end);
        }
        swap(array, center, end - 1);
        return array[end - 1];
    }

    private static int partionArray(int[] array, int start, int end, int pivot) {
        int pl = start;
        int pr = end - 1;
        while (true) {
            while (array[++pl] < pivot);
            while (array[--pr] > pivot);
            if (pl >= pr) {
                break;
            } else {
                swap(array, pl, pr);
            }
        }
        swap(array, pl, pr - 1);
        return pl;
    }

    private static void swap(int[] array, int left, int right) {
        int temp = array[left];
        array[left] = array[right];
        array[right] = temp;
    }

}

posted @ 2014-12-19 17:48  lihui1625  阅读(93)  评论(0编辑  收藏  举报