您的位置:首页 > 其它

寻找无序数组中的第K大数

2012-02-08 23:07 218 查看
利用快速排序的思想,其中K从1开始

int quicksort(int * x , int l , int r , int k)
{
if(l == r && k==1)return x[l];
int i , j ;
for(i=l-1 , j=l;j<r;j++)
if(x[j]<x[r])std::swap(x[++i] , x[j]);
std::swap(x[++i] , x[r]);
if(k==(i-l+1))return x[i];
if(k<=(i-l))return quicksort(x , l , i-1 , k);
if(k>(i-l+1)) return quicksort(x , i+1 , r , k-(i-l+1) );
}


例如寻找5, 2, 6, 3中的第3大数,排好序后变为2 , 3 , 5 , 6 , 故结果为5,可以利用上述函数cout<< quicksort(x , 0 , 3 , 3)<<endl;

注意数组从0开始,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: