public class MaxNumberFinder {
public int findTheNNumber(int[] arr,int n,int start,int end){
int ret = -1;
int p = partition2(arr, start, end);
if(n == p){
return arr[p];
}else if(n > p){
return findTheNNumber(arr,n-p,p + 1,end);
}else if(n < p){
return findTheNNumber(arr,n,start,p - 1);
}
return ret;
}
public int partition(int[] arr,int start, int end){
int length = arr.length;
if(end >= length){
return -1;
}
int pivot = arr[start];
while(start < end){
while(start < end && arr[end] >= pivot){
end--;
}
arr[start] = arr[end];
while(start < end && arr[start] <= pivot){
start++;
}
arr[end] = arr[start];
}
arr[start] = pivot;
return start;
}
public int partition2(int[] arr,int start, int end){
int pivot = arr[start];
int i = start;
for(int j = start + 1;j <= end; j++){
if(arr[j] < pivot){
swap(arr,j,++i);
}
}
swap(arr,start,i);
return i;
}
public void swap(int[] arr,int i, int j){
if (i == j){
return;
}
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] orgs){
MaxNumberFinder finder = new MaxNumberFinder();
int n = 2;
int[] arr = {9,8,6,2,1,5,4,3};
System.out.println(finder.findTheNNumber(arr, n - 1, 0, arr.length - 1));
}
}
查找第N大的数
最新推荐文章于 2020-07-07 10:26:44 发布