题目描述:
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
示例一:
输入 [1,3,5,2,2],5,3
输出 2
题目思想,先通过快速排序,把程序排好,然后找第K个数。
public static int findKth(int[] a, int n, int K) {
// write code here
int[] b = new int[n];
int t = 0;
b = quicksort(a);
return b[n-K];
}
public static int partio(int[] a,int low,int high)
{
int tep = a[low];
while(low<high)
{
while(low<high&&a[high]>=tep)
{
--high;
}
if(low>=high)
{
break;
}
else
{
a[low] = a[high];
}
while(low<high&&a[low]<=tep)
{
++low;
}
if(low>=high)
{
break;
}
else
{
a[high] = a[low];
}
}
a[low] = tep;
return low;
}
public static void quick(int[]a,int start,int end)
{
int per = partio(a,start,end);
if(per>start+1)
{
quick(a,0,per);
}
if(per<end - 1)
{
quick(a,per+1,a.length-1);
}
}
public static int[] quicksort(int[]a)
{
quick(a,0,a.length-1);
return a;
}