查找第N大的数

来源:互联网 发布:淘宝买家怎么提升信誉 编辑:程序博客网 时间:2024/04/30 13:11
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));}}