06-快速排序算法

快速排序算法

快速排序: 是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他 n-1 个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

快速排序代码

public static void quickSort(int[] arr, int left, int right){
    if (left < right){
        int key = arr[left];
        int low = left;
        int high = right;

        while(low < high){
            while (low < high && arr[high] >= key){
                high--;
            }
            arr[low] = arr[high];
            while (low < high && arr[low] <= key){
                low++;
            }
            arr[high] = arr[low];
        }

        arr[low] = key; //pivot key的位置是low/high的位置

        for (int x : arr){
            System.out.print(x + " ");
        }
        System.out.println();

        //将基准pivot key的左右两边递归
        quickSort(arr, left, low-1);
        quickSort(arr, low+1, right);
    }
}

测试样例

int[] arr = {249326715};
quickSort(arr, 08);

每轮输出结果为:加粗值是每轮的pivot key,得出的确定其在排序之后的最终位置和数组变动结果。

1 2 9 3 2 6 7 4 5
1 2 5 3 2 6 7 4 9
1 2 4 3 2 5 7 6 9
1 2 2 3 4 5 7 6 9
1 2 2 3 4 5 7 6 9
1 2 2 3 4 5 6 7 9

原文地址:https://www.cnblogs.com/denluoyia/p/9685829.html