思路
代码
public static void quickSort(Integer[] arr) {
quickSort(arr, 0, arr.length-1);
}
public static void quickSort(Integer[] arr, int left, int right) {
if (left > right) {
return;
}
int start = left;
int end = right;
int midValue = arr[left];
while (left < right) {
while (left < right && arr[right] >= midValue) {
right --;
}
while (left < right && arr[left] <= midValue) {
left ++;
}
if (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
arr[start] = arr[left];
arr[left] = midValue;
quickSort(arr, start, left-1);
quickSort(arr, left+1, end);
}
总结
快速排序的优势在于能一次交换两个数,使得整体交换次数相对较少,但当数组长度过长时,由于用的时递归,可能会导致堆栈溢出,这点一定要注意。另外快速排序的另一个很重要的点是要注意midValue的选择,若每次都选的最大或最小值,则导致效率直线下降,退化为冒泡排序,故可以考虑使用三值取中的方法。