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 = {2, 4, 9, 3, 2, 6, 7, 1, 5};
quickSort(arr, 0, 8);
每轮输出结果为:加粗值是每轮的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