求n个元素序列中第k大的元素
#include<iostream>
using namespace std;
#include<time.h>
#include<stdlib.h>
int m1,m2,k,r[20001];
int s(int m1,int m2,int k)
{
int i,j;
if(m1<m2){
i=m1;
j=m2;
r[0]=r[i];
while(i!=j){
while(r[j]<=r[0]&&j>i)//检查从右至左数是否小于基准
j=j-1;
if(j>i){r[i]=r[j];i=i+1;}//把大于基准的一个值赋给r[i]
while(r[i]>=r[0]&&j>i)
i=i+1;
if(j>i){r[j]=r[i];j=j-1;} //把小于基准的一个值赋给r[j]
}
}
r[i]=r[0];
if(i=k) return r[k];
else if(i<k) return s(i+1,m2,k);
else return s(m1,i-1,k);
}
void main(){
int i,n,t;
int s(int m1,int m2,int k);
t=time(0)%1000;srand(t);
cout<<"参与选择的有n个整数,请确定n:"<<endl;
cin>>n;
cout<<"选择第k大整数,请确定k:"<<endl;
cin>>k;
cout<<"参与选择的"<<n<<"个整数为"<<endl;
for(i=1;i<=n;i++)
{
r[i]=rand()%(4*n)+10;
cout<<r[i]<<endl;
}
s(1,n,k);
cout<<"以上"<<n<<"个整数中第"<<k<<"大的整数为"<<r[k]<<endl;
}