借助快速排序的思路,可以实现一种查找算法, Kth Order Statistic,即给定一个未排序的数组,找到数组中第K大的数。
注意这个Kth Order Statistic和top K算法有区别。Top K算法是找到前K大的数,要找K个数。而Kth Order Statistic 是找到第K大的数,只找1个数。
//借助快速排序中的partition函数
int partition_kth(int* arr, int st, int ed){
int j=st;
int i=j-1;
int pivot=arr[ed];
int temp;
while (j<=ed-1) {
if (pivot>arr[j]) {
i++;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
j++;
}
i++;
temp=arr[ed];
arr[ed]=arr[i];
arr[i]=temp;
return i;
}
函数主要算法如下,使用了递归的思路
//Kth Order Statistic算法
int kth_order_statistic(int* arr, int st, int ed, int order)
{
int attemp_order = partition_kth(arr,st,ed);
int temp1 = attemp_order -st+1;
if (temp1 ==