package demo;
public class P39 {
public static void main(String[] args) {
int[] arr= {3,9,7,6,1,2};
System.out.println(selectK(arr, 0, arr.length-1, 1));
System.out.println(selectK(arr, 0, arr.length-1, 2));
System.out.println(selectK(arr, 0, arr.length-1, 3));
System.out.println(selectK(arr, 0, arr.length-1, 4));
System.out.println(selectK(arr, 0, arr.length-1, 5));
System.out.println(selectK(arr, 0, arr.length-1, 6));
}
static int selectK(int[] arr, int s,int e,int k) {
int a=partition2(arr, s, e);
int aK=a-s+1;
if(aK==k)
return arr[a];
else if(aK>k)
return selectK(arr, s, a-1, k);
else
return selectK(arr, a+1, e, k-aK);
}
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 中如何实现缓存的预热?