第k小元

来源:互联网 发布:翼龙贷 网数据档案 编辑:程序博客网 时间:2024/05/17 06:59
/*第k小元*/#include <iostream>#include <cstdlib>using namespace std;#define N 10int a[N]={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;}

0 0
原创粉丝点击