快速排序 Quicksort

Quick sort快速排序

@See https://en.wikipedia.org/wiki/Quick_sort @See https://github.com/jiek2529/java_algorithm - QuickSort

principle原理

把列表按中间值进行左右大小换位。 左边第一个比中间值大的,与右边自右向左第一个比中间值小的进行换位。

在根据左边循环后最大的位置为界,进行小范围的再按此方式循环置换,达到排序。

example示例

public void sort(int[] list) {
        if (list != null && list.length > 1) {
            quickSort(list, 0, list.length - 1);
        }
    }

    private void quickSort(int list[], int left, int right) {
        int index = partition(list, left, right);
        if (left < index - 1) {
            quickSort(list, left, index - 1);
        }
        if (index < right) {
            quickSort(list, index, right);
        }
    }

    /**
     * 分区折中交换
     *
     * @param list  int数组
     * @param left
     * @param right
     * @return
     */
    private int partition(int list[], int left, int right) {
        int i = left, j = right;
        int pivot = list[(left + right) / 2];//取折中点的值
        while (i <= j) {//如果是倒序,就是把以下两while条件判断修改
            while (list[i] < pivot)
                i++;
            while (list[j] > pivot)
                j--;
            if (i <= j) {
                swap(list, i, j);
                i++;
                j--;
            }
        }
        return i;
    }

Last updated

Was this helpful?