步骤
获得待排序数组a选取一个合适的数字p(一般来说就选取数组或是子数组的第一个元素)作为排序基准将待排序数组a中比基准p小的放在p的左边,比基准p大的放在p的右边 从第3步获得的两个子数组sub1跟sub2判断sub1或sub2中是否只有一个元素,如果只有一个元素则返回此元素,否则就将sub1(或是sub2)代回到第1步中继续执行
public static void main(String[] args) {
int a[] = {6,5, 2, 4, 6, 1, 3, 11, 9, 10, 8, 7,0};
quickSort(a,0,a.length - 1);
System.out.println("最终排序结果"+Arrays.toString(a));
}
public static int partition(int arr[], int left, int right){
int i = left, j = right;
int tmp;
//定义参照值为数组的中间值
int pivot = arr[(left + right) / 2];
while (i <= j) {
//当arr[i]小于参照值时,符合左边小的原则,不需调换位置,直接跳过,直到找到不满足条件的A[i]时终止该循环
while (arr[i] < pivot)
i++;
//当arr[j]大于参照值时,符合右边大的原则,不需调换位置,直接跳过,直到找到不满足条件的A[j]时终止该循环
while (arr[j] > pivot)
j--;
//i小于j时,完成a[i]和a[j]的交换
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
} };
//返回的i就是满足i左边的值比i小.i右边的值比i大
return i;
}
public static void quickSort(int arr[], int left, int right) {
int index = partition(arr, left, right);
// System.out.println("index"+index);
if (left < index - 1){
quickSort(arr, left, index - 1);
// System.out.println(Arrays.toString(arr));
}
if (index < right){
quickSort(arr, index, right);
// System.out.println(Arrays.toString(arr));
}
}