您的位置:首页 > 其它

第k小元

2015-07-13 15:33 323 查看
/*第k小元*/
#include <iostream>
#include <cstdlib>
using namespace std;

#define N 10
int a
={1,3,5,6,3,8,9,10,11,23};

void swap(int i,int j);
int partition(int begin,int end);
void select(int k,int &x);
void print();

int main(){
int x;
select(4,x);
cout << x;
return 0;
}

void select(int k,int &x){
int j,begin=0,end=N-1;
do{
j = rand()%(end-begin+1)+begin;
/*产生随机数在begin-end中*/
swap(j,begin);
j = partition(begin,end);
if(k == j+1){
x = a[j];
return;
}else if(k < j+1){
end = j;
}else{
begin = j+1;
}
}while(begin <= end);
}

int partition(int begin,int end){
int i = begin,j = end+1;
do{
do{
i++;
}while(a[i] < a[begin]);
do{
j--;
}while(a[j] > a[begin]);
if(i <= j){
swap(i,j);
}
}while(i<=j);
swap(begin,j);
return j;
}

void swap(int i,int j){
int tmp;
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: