package heping.contact;
package heping.contact;
public class ArrayQuickSort {
//对数组data中索引为i、j位置互换
public static void reverse(int[] data,int i, int j){
int temp = 0;
temp = data[j];
data[j] = data[i];
data[i] = temp;
}
public static void Quick(int[] data, int start, int end){
if(start < end){
int base = data[start];
int low = start; //0
int high = end; //data.length-1
while(true){ //注意下面的符号,现在是从小到大,也可以从大到小
//从右到左搜索小于base的值
while(high > start && base <= data[high]){
--high;}
//从左到右搜索大于base的值
while(low < end && base >= data[low]){
++low;}
//大于base和小于base的值都找到后调换位置
if(low < high){
reverse(data,low,high);
}else{
break;}
}
reverse(data,start,high); //此时基准base处于high的位置上
Quick(data,start,high-1); //递归调用
Quick(data,high+1,end);
}
}
public static void main(String[] args){
int [] data = new int []{4,5,6,7,8,3,2,1,9};
System.out.println("排序之前:n" + java.util.Arrays.toString(data));
Quick(data,0,data.length-1);
System.out.println("排序之后:n" + java.util.Arrays.toString(data));
}
}