快排
/** * 快排 * @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; } }