关于求N个无序数中第K大的数。
2012-03-16 来源:小木虫
作者: SmallWarm
昨天去面试,有一题是要求求N个无序数中第K大的数。当时灵感激发,突然想到了快速排序,后来在百度上面一查,已有这种算法。但是,这里还是写下来,大家分享一下。
/*类似于快排的一次排序*/
int fun(int a,int n,int k) /*n个数的个数,k为所要求的第几大的数*/
{
int key=a;
int i=0,j=n-1;
while(i!=k-1&&j!=k-1)
{
while(i<k-1&&a while(j>k-1&&a>key) j--;
exchange(a,a);
}
if(i=k-1)
{
while(j!=k-1)
{
while(j>k-1&&a>key) j--;
exchange(key,a);
}
}
if(j=k-1)
{
while(i!=k-1)
{
while(i>k-1&&a>key) i++;
exchange(key,a);
}
}
return key;
}
void exchange(int a,int b) /* 交换a,b的值*/
{
a=a+b;
b=a-b;
a=a-b;
}