利用快速排序求解k-th小数

来源:互联网 发布:java微信公众号开发pdf 编辑:程序博客网 时间:2024/06/13 19:57

如题,直接给代码了。

#include<iostream>#include<time.h>using namespace std;int num[100005];int K;void exch(int &a,int &b){int temp;temp=a;a=b;b=temp;}int q_sort(int s,int e){srand((unsigned)time(NULL));//产生随机数种子int index=(rand()%(e-s+1))+s;//[s,e]exch(num[index],num[e]);int i;int j=s;//j记录分界线for(i=s;i<e;i++){if(num[i]<=num[e])//{exch(num[i],num[j]);j++;}}exch(num[j],num[e]);if(j-s==K-1)return num[j];else if(j-s>K-1){q_sort(s,j-1);}else{K=K-(j-s+1);//The key pointq_sort(j+1,e);}}int main(){int n;int i;while(cin>>n&& n>0){for(i=0;i<n;i++)cin>>num[i];cin>>K;if(K<=0 || K>n)return -1;cout<<q_sort(0,n-1)<<endl;}return 0;}



0 0
原创粉丝点击