/**
* 随机快排
* @param arr
* @param L
* @param R
*/
public void sort2(int []arr,int L,int R){
if(L<R){
swap(arr,(int)(L+((R-L+1)*Math.random())),R);//忽略数据初始分布 使得时间复杂度为O(n*logn)
int []p=partion(arr,L,R);
sort2(arr,L,p[0]-1);
sort2(arr,p[1]-1,R);
}
}
public int [] partion(int []arr,int L,int R){
int less=L-1;
int more=R;//让最后一个数最后交换
while (L<more){
if(arr[L]<arr[R]){
swap(arr,L++,++less);
}else if(arr[L]>arr[R]){
swap(arr,L,--more);
}else {
L++;
}
}
swap(arr,more,R);
return new int[]{less+1,more};
}
public void swap(int []arr,int i,int j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
随机快排
最新推荐文章于 2024-07-28 22:35:47 发布