package demo;
import java.util.Arrays;
public class P33 {
public static void main(String[] args) {
int[] arr= {10,16,4,5,25,13,20};
quickSort(arr, 0, 6);
System.out.println(Arrays.toString(arr));
}
static void quickSort(int[] arr,int p,int r) {
if(p<r) {
int q=partition2(arr,p,r);
quickSort(arr, p, q-1);
quickSort(arr, q+1, r);
}
}
static int partition(int[] arr,int p,int r) {
int mid=p+((r-p)>>1);
int midValue;
int temp;
if( (arr[mid]-arr[p])*(arr[mid]-arr[r])<0 ) {
midValue=mid;
}
else if( (arr[p]-arr[mid])*(arr[p]-arr[r])<0 ) {
midValue=p;
}
else {
midValue=r;
}
temp=arr[p];
arr[p]=arr[midValue];
arr[midValue]=temp;
int value=arr[p];
int left=p+1;
int right=r;
while(left<=right) {
if(arr[left]<=value) {
left++;
}
else {
temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
right--;
}
}
arr[p]=arr[right];
arr[right]=value;
return right;
}
static int partition2(int[] arr,int p,int r) {
int mid=p+((r-p)>>1);
int midValue;
int temp;
if( (arr[mid]-arr[p])*(arr[mid]-arr[r])<0 ) {
midValue=mid;
}
else if( (arr[p]-arr[mid])*(arr[p]-arr[r])<0 ) {
midValue=p;
}
else {
midValue=r;
}
temp=arr[p];
arr[p]=arr[midValue];
arr[midValue]=temp;
int value=arr[p];
int left=p+1;
int right=r;
while(left<=right) {
while(left<=right && arr[left]<=value) left++;
while (left <= right && arr[right] > value)
right--;
if (left < right) {
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
arr[p]=arr[right];
arr[right]=value;
return right;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?