查找第k小的数

作者在 2010-07-05 16:53:35 发布以下内容

查找第k小的数

问题描述:给定n个元素,要求从中找出第k小的元素。

文件输入:第一行两个整数:第一个是n表示有n个正整数(n<=50000),第二个整数k表示要查找第k小的元素;
  第二行有n 个用空格隔开的整数。

文件输出:一个整数,第一个表示第k 小的元素的值。

样例输入:

 5 3

 23 8 91 56 4

样例输出:

 23

#include<iostream>

using namespace std;

int a[20001],k;

 

int search(int le,int ri)

{

    if(le==ri)return a[le];

    int i=le,j=ri,mid=(i+j)/2,kk=a[mid];

   

    a[mid]=a[le];

    while(i<j)

    {

      while(i<j&&a[j]>=kk)j--;

      a[i]=a[j];

      while(i<j&&a[i]<=kk)i++;

      a[j]=a[i];

    }

    a[i]=kk;

    if(i==k)return kk;

    if(k<=i-1)return search(le,i-1);

    else return search(i+1,ri);

}

int main()

{

   

   int n;

   n=0; 

   while(1)

   {

     scanf("%d",&a[++n]);

     if(a[n]<0)break;

   

   }

    cin>>k;

    cout<<search(1,n-1);

 

}

编程 | 阅读 1178 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档
最新评论