#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大数字
最新推荐文章于 2022-01-02 20:06:31 发布