package day01;
public class QuickSort {
public static void main(String[] args) {
//快排3.0
int[] arr= {2,7,6,5,3,4,0,9,10,2,3};
process(arr,0,arr.length-1);
for(int n : arr)
{
System.out.println(n);
}
}
public static void process(int[] arr, int L,int R) {
if(L<R)
{
//先交换末尾
int random = L+ ((int) (Math.random()*(R-L+1)));
Swap.swap(arr, R, random);
int[] eqs = partition(arr,L,R); //返回等于边界的两个指针
process(arr,L,eqs[0]-1);
process(arr,eqs[1]+1,R);
}
}
public static int[] partition(int[] arr,int L,int R)
{ //partition过程:
int left = L-1; //左边小于边界指针
int right = R+1; //右边大于边界指针
int target = arr[R]; //当前目标值
int i = L ; //当前遍历指针
while(i<right)
{
if(arr[i]<target)
{
Swap.swap(arr, ++left, i);
i++;
}else if(arr[i]>target)
{
Swap.swap(arr, i, --right);
}else if(arr[i] == target)
{
i++;
}
}
return new int[]{left+1,right-1};
}
}
快排3.0
最新推荐文章于 2024-07-26 12:28:02 发布