/**
* 正常情况下,快排都是选取最左侧为基准数,但是在某些情况下,比如数组基本有 序的情况下,这种选取方式效率较低。为了解决这个问题,我们可以通过三数
(左、右、中)选取中间的数来提高整体的效率。
*/
public class QuickSortDemo2 {
public static void main(String[] args) {
int[] array = {1,4,5,3,6,5,9,10,45,34,23,12,54,77,43,22,10,87,32,27,87,12,32,34,46,76,78,79};
quickSort2(array,0,array.length-1);
System.out.println(Arrays.toString(array));
}
public static void quickSort2(int[] array,int left,int right){
if (left > right)return;
int temp;
int target;
//三数取中
int a = array[left];
int b = array[right];
int c = array[(left+right)/2];
if (c > a && c < b){
array[left] = c;
array[(left+right)/2] = a;
}else if (b > a && b < c){
array[left] = b;
array[right] = a;
}
target = array[left];
System.out.println(target);
int i = left;
int j = right;
while(i!=j){
while(array[j] >= target && i < j){
j--;
}
while(array[i] <= target && i < j){
i++;
}
if (i < j){
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
array[left] = array[i];
array[i] = target;
quickSort2(array, left, i-1);
quickSort2(array, i+1, right);
}
}
06-28
1737
08-29
1256