2020—4 线性复杂度求第K大的数
程序员文章站
2024-03-15 19:12:24
...
本题可以使用桶排序、基数排序、计数排序(我个人比较喜欢计数排序)
下面的方法是基于快速排序(比较复杂,但是漏洞最少)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int quicksort(int s[],int l,int r)
{
int i,j,x;
if(l<r)
{
i=l;
j=r;
x=s[i];
while(i<j)
{
while(i<j && s[j]>=x) j--;
if(i<j)s[i++]=s[j];
while(i<j && s[i]<x)i++;
if(i<j)s[j--]=s[i];
}
s[i]=x;
return i;
}
return -1;
}
int select(int s[],int l,int r,int k)
{
int i,j;
if(l>r)return -1;
if(l==r)return s[l];
i=quicksort(s,l,r);
j=r-i+1;
if(j==k)
return s[i];
if(j>k)
return select(s,i+1,r,k);
if(j<k)
return select(s,l,i,k-j);
}
int main()
{
int A[]={1,2,3,4,5,6,7,8,9,10};
printf("%d",select(A,0,9,2));
system("pause");
return 0;
}
上一篇: 100以内质数的打印