// 交换 public static void swap(int[] arr,int i,int j){ if(i!=j){ arr[i]=arr[i]^arr[j]; arr[j]=arr[i]^arr[j]; arr[i]=arr[i]^arr[j]; } }
//生成 随机 数组 public static int[] getRandomArray(int size,int range){ if(size<1){ return null; } int[] arr=new int[(int)(Math.random()*size+1)]; for (int i = 0; i <arr.length ; i++) {
arr[i]=(((int)(Math.random()*(range+1)))-((int)(Math.random()*(range))));
}
return arr;
}
// 分块
public static int[] partition(int[] arr,int L,int R,int num){
int cur=L;
int less=L-1;
int more=R+1;
while (cur<more){
if(arr[cur]>num){
swap(arr,--more,cur);
} else if(arr[cur]<num){
swap(arr,++less,cur++);
}else {
cur++;
}
}
return new int[]{less,more};
}
// 快速排序
public static void quickSort(int[] arr,int L,int R){
if(L>R){
return;
}
// 产生 L- R 之间 的 随机下标
int index=(int)(Math.random()*(R-L))+L;
int[] partition = partition(arr, L, R, arr[index]);
quickSort(arr,0,partition[0]);
quickSort(arr,partition[1],R);
}
public static void main(String[] args) {
int[] arr = getRandomArray(10,10);
System.out.println(Arrays.toString(arr) );
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr) );
}