思路:首先找到一个基准数。然后定义两个游标,分别将从数组两头到中间的各数与基准数进行比较,目的在于一趟下来比基准数小的都在基准数左边,比基准数大的都在基准数右边,然后以基准数的下标为界将数组分为两个部分,再对数组进行递归,最终得到有序的完整数组。时间复杂度:O(n) = nlogn;
传送门
private static int[] quickSort(int[] array,int startIndex,int endIndex){
if(array!=null&&array.length>1&&startIndex>=0&&startIndex<array.length&&endIndex>=0&&endIndex<array.length){
int x = array[startIndex];
int i = startIndex;
int j = endIndex;
int ken = startIndex;
while (i<j){
if (array[j]<x){
array[ken] = array[j];
ken = j;
while (i<j){
if(array[i]>x){
array[ken] = array[i];
ken = i;
break;
}
i++;
}
}
j--;
}
array[ken] = x;
System.out.println(ken);
Printer.printArray(array);
Printer.printDiv();
if(startIndex<ken){
quickSort(array,startIndex,ken);
}
if(ken<endIndex){
quickSort(array,ken+1,endIndex);
}
}
return array;
}