/**
* 快速排序
*/
public static int[] QuickSort(int[] arr, int left, int right) {
if (left > right) {
return arr;
}
//找到主元
int pivot = arr[left];
int i = left;
int j = right;
while (left < right) {
//如果当前的数>=主元并且两边指针没有越位,则指针向左移动,否则进入下一个循环
while (arr[right] >= pivot & right > left) {
right--;
}
//当前的数<=主元并且两边指针没有越位,指针向右移动,否则跳出循环
while (arr[left] <= pivot & right > left) {
left++;
}
//然后交换当前指针的值
if (left < right)
swap(arr, left, right);
}
//指针重合,把主元放到正确位置,结束第一次子集划分
swap(arr, left, i);
QuickSort(arr, i, left - 1);
QuickSort(arr, right + 1, j);
return arr;
}
注意:快速排序最重要的一点,就是主元的选取,如果主元选的不恰当,快速排序也就不快了。这里是把数组第一位作为主元。