//(前两种时间复杂度为o(n^2) , 最后一种为o(n*logn)
public static void swap(int[] arr , int i , int j){
arr[i] =arr[i] ^arr[j];
arr[j] =arr[i] ^arr[j];
arr[i] =arr[i] ^arr[j];
}
//使数组中以arr[R]划分,返回循环后arr[R]的所在地
public static int partition(int[] arr , int L ,int R ){
if(L >R ){
return -1;
}
if(L == R ){
return L;
}
int lessEqual = L-1;
int index = L;
while (index <R ){
if(arr[index] <=arr[R]){
swap(arr ,index++ , ++lessEqual);
}
}
swap(arr , ++lessEqual , R);
return lessEqual;
}
//把一个数组以arr[R]划分,返回的是值为arr[R]的区间
public static int[] netherlandsFlag(int[] arr , int L , int R){
if(L>R){
return new int[] { -1 ,-1};
}
if(L ==R){
return new int[] {L ,R};
}
int less = L-1;
int more =R;
int index = L;
while (index <more){
if(arr[index] ==arr[R]){
index++;
}else if(arr[index] <arr[R]){
swap(arr ,index++ , ++less);
}else{
swap(arr ,index , --more);
}
}
swap(arr ,more ,R );
return new int[] {less+1 , more};
}
//递归1
public static void process1(int[] arr ,int L ,int R ){
if(L >=R){
return;
}
int M =partition(arr ,L ,R);
process1(arr , L , M-1);
process1(arr , M+1 ,R);
}
//快排1
public static void quickSort1(int[] arr){
if(arr ==null || arr.length <2){
return;
}
process1(arr ,0 , arr.length-1);
}
//递归2
public static void process2(int[] arr ,int L ,int R){
if(L >=R){
return;
}
int[] equalArea =netherlandsFlag(arr ,L ,R);
process2(arr ,L ,equalArea[0] -1);
process2(arr , equalArea[1] , R);
}
//快排2
public static void quickSort2(int[] arr){
if(arr ==null || arr.length <2){
return;
}
process2(arr ,0 , arr.length-1);
}
//递归3
public static void process3(int[] arr , int L ,int R){
if(L > R ){
return;
}
swap(arr ,L + (int) (Math.random() * (R - L+1)), R);
int[] equalArea = netherlandsFlag(arr , L ,R);
process3(arr , L , equalArea[0] -1);
process3(arr , equalArea[1] +1, R );
}
//快排3
public static void quickSort3(int[] arr){
if(arr == null ||arr.length <2){
return;
}
process3(arr , 0 , arr.length-1);
}
快排的3种方式
听风客12024-07-16 11:38
相关推荐
LUCIAZZZ1 分钟前
Https解决了Http的哪些问题论迹22 分钟前
【JavaEE】-- 多线程(初阶)2桃子是唯一的水果31 分钟前
java 单例模式(Lazy Initialization)实现遍历文件夹下所有excel文件且返回其运行时间+72033 分钟前
如何在java中用httpclient实现rpc post 请求ybq1951334543134 分钟前
javaEE-SpringBoot日志火烧屁屁啦38 分钟前
【JavaEE进阶】图书管理系统 - 贰xzzd_jokelin38 分钟前
Spring AI 接入 DeepSeek:开启智能应用的新篇章web_1553427465640 分钟前
性能巅峰对决:Rust vs C++ —— 速度、安全与权衡的艺术刘什么洋啊Zz1 小时前
剖析IO原理和零拷贝机制卷心菜好6啊1 小时前
特辣的海藻!2