import java.util.*;
public class Solution {
public int findKth(int[] arr, int n, int K) {
// write code here
int res = quickSort(arr, 0, n - 1, K);
return res;
}
public int quickSort(int[] arr, int low, int high, int k){
if(low <= high){
int loc = partition(arr, low, high);
if(k == loc - low + 1){
return arr[loc];
}else if(k > loc - low + 1){ // k在loc的右边
return quickSort(arr, loc + 1, high, k - (loc - low + 1));
}else{ // k在左边
return quickSort(arr, low, loc - 1, k);
}
}
else{
return -1;
}
}
public static int partition(int[] arr, int low, int high){
int i = low;
int pivot = arr[low];
while(low < high){
while(low < high && arr[high] <= pivot){
high--;
}
while(low < high && arr[low] >= pivot){
low++;
}
if(low < high){
int temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
}
}
arr[i] = arr[low];
arr[low] = pivot;
return low;
}
public int partition2(int[] a,int left,int right){
//基准值
int base = a[left];
while(left < right){
while (left < right && a[right] <= base)
right--;
a[left] = a[right];
while(left < right && a[left] >= base)
left++;
a[right] = a[left];
}
a[left] = base;
return left;
}
public int partition4(int[] a,int left,int right){
//基准值
int base = a[left];
while(left < right){
while (left < right && a[right] <= base)
right--;
if(left < right) a[left++] = a[right];
while(left < right && a[left] >= base)
left++;
if(left < right) a[right--] = a[left];
}
a[left] = base;
return left;
}
}
寻找第K大-Java
最新推荐文章于 2023-01-20 19:32:07 发布