|
沙发
楼主 |
发表于 2015-11-1 23:09:51
|
只看该作者
- #include<iostream>
- #include<iomanip>
- using namespace std;
- int a[20]= {10,1,7,3,5,9,8,2,6,4,11,13,25,19,17,20,12,18,16,15};
- int partion(int *a,int l,int r)
- {
- int p=a[l];//划分元素定为A[l]
- while(l<r)
- {
- while((a[r]>=p)&&(l<r))r--;//后面找比P小的数
- a[l]=a[r];
- while((a[l]<=p)&&(l<r))l++;//前面找比P大的数
- a[r]=a[l];
- }
- a[l]=p;return l;
- }
- int main()
- {
- int x=8;//其实是求第8小,最小的是第0小
- int l=0,r=19;
- bool bb=true;
- int t;
- do
- {
- t=partion(a,l,r);// 得到划分元素的位置
- if (t>x)r=t-1; //若位置比x大,说明第X小的在前面
- else if (t<x)l=t+1;//到后面去找
- else bb=false;//相等表示找到了
- } while (bb);
- cout<<a[x]<<endl;
- return 0;
- }
复制代码 |
|