[刷题1]寻找数组第k大的值
思想:利用快排的partition函数,返回位置坐标mid,如果mid==k-1,我们已经找到第k大的数;如果mid < k-1,对mid右边进行递归;如果mid>k-1,对mid坐标进行递归。
partition代码:
public int partition(int a[],int left,int right)
{
int temp = a[left];
while(left < right)
{
while(left<right && a[right] >= temp)
right--;
a[left] = a[right];
while(left<right && a[left] <= temp)
left++;
a[right] = a[left];
}
a[left] = temp;
return left;
}
findMink代码:
public int findMink(int a[],int left,int right,int k)
{
if(k > a.length)//k是否已经超过数组的大小
return -1;
if(left >= right)
return a[left];
int mid = partition(a,left,right);
if(mid == k-1)
return a[mid];
else if(mid > k-1)
return findMink(a,left,mid-1,k);
else
return findMink(a,mid+1,right,k);
}