public class Main {
/**
* @param args
*/
//随机快速排序
//原理 不断的将一个基准左右有序 然后返回基准的左右下标
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {0, -4, -1, 6, 8, 8, 53, 15};
RandomquickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr,int L,int R){
if(L<R){
//随机的话默认以最后一个数为基准递归下去
int[] p = partition(arr,L,R);
quickSort(arr,L,p[0]);
quickSort(arr,p[1],R);
}
}
//随机快速排序 从 R-L中找一个随机位置 交换到最后
public static void RandomquickSort(int[] arr,int L,int R){
if(L<R){
swap(arr,R,(int)(Math.random()*(R-L))+1);
int[] p = partition(arr,L,R);
quickSort(arr,L,p[0]);
quickSort(arr,p[1],R);
}
}
//默认以最后一个数为基准
public static int[] partition(int[] arr,int L,int R){
int left = L-1;
int right = R;
while(L<right){
if(arr[L]<arr[R]){
swap(arr,L++,++left);
}else if(arr[L]>arr[R]){
swap(arr,L,--right);
}else{
L++;
}
}
//将最后那个基准 与 右边范围第一个数交换 ----寓意交换到中间
swap(arr,right,R);
//不建议使用 L++ 因为到最后会不知道left的正确值
return new int[]{left,right+1};//返回的是刚好能把数组分成两半的值
}
public static void swap(int[] a,int i,int j){
int temp = a[i];
a[i] = a[j];
a[j]=temp;
}
}快速排序+随机快速排序
最新推荐文章于 2024-07-28 22:35:47 发布
本文介绍了一种改进的快速排序算法——随机快速排序,并提供了详细的实现代码。该算法通过选取随机基准来提高排序效率,适用于各种数据类型。
1768

被折叠的 条评论
为什么被折叠?



