1、要求提交一个函数,所以没有给出完整程序。
2、利用了快速排序(折半查找)的思想,节约时间是因为快速排序要求关键字左边和右边分别有序,而本题只需要满足i==K-1就可以停止了,省去了递归步骤,所以较快。
int findKth(int *s,int n,int K){
int x=s[0],i=0,j=n-1,temp;
while(i<j){
while(i<j&&s[j]>=x) j--;
temp=s[i];s[i]=s[j];s[j]=temp;
while(i<j&&s[i]<=x) i++;
temp=s[i];s[i]=s[j];s[j]=temp;
}
if(i==K-1) return s[i];
else if(i<K-1) return findKth(&s[i+1],n-i-1,K-i-1);
else return findKth(s,i+1,K);
}