/**
* 快排
* @param left
* @param right
*/
public static void quickSort(int left, int right) {
if(left >= right)//如果左指针大于等于右指针,本轮排序结束
return;
int start = left;//起始指针
int end = right;//终止指针
int base = a[start];//基数(选最左边的数)
//左指针如果小于右指针,则循环
while(left < right) {
//当右指针指向的数小于等于基数,则右指针往左移动,否则停止
while(a[right] >= base && right > left)
right--;
//当左指针指向的数大于等于基数时,则左指针向右移动,否则停止
while(a[left] <= base && right > left) {
left++;
}
//交换做右指针指向的数
swap(left, right);
}
//停止位置与基数互换
swap(start, right);
//递归
quickSort(start, right-1);
quickSort(right + 1, end);
}
private static void swap(int i, int j) {
if(i != j) {
int p = a[i];
a[i] = a[j];
a[j] = p;
}
}