#include<bits/stdc++.h>
using namespace std;
void Find_knumber(int *A,int l,int r,int k){
if(l == r)return ;
int imp = A[l]; //左边作为枢轴
int i = l,j = r;
while(i != j){ //从右边开始找
while(A[j] >= imp && j > i)j--;
while(A[i] <= imp && j > i)i++;
if(j > i){ //如果没有重合
int tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
}
A[l] = A[i];
A[i] = imp;
if(i == k)return; //找到了这个数字
int m = (l + r)>>1;
if(m >= k)Find_knumber(A,l,m,k);//看往哪走
else Find_knumber(A,m + 1,r,k);
}
int main()
{
int a[10] = {-1,2,4,-7,5,2,-1,2,-4,3};//第一位空
int n = 9,k = 1;//数组的长度,第k个数字
Find_knumber(a,1,n,k);
printf("%d\n",a[k]);
return 0;
}
找第K大数字
最新推荐文章于 2021-06-05 00:17:34 发布
本文介绍了一种快速查找数组中第K个数的算法实现。通过使用类似快速排序的分区策略,该算法能够在平均线性时间内找到目标元素。示例代码展示了如何通过递归调用对数组进行分区,并在适当的位置返回第K个数。
2313

被折叠的 条评论
为什么被折叠?



