线性时间的选择
下面的代码怎么没有输出结果。。。。。。
# include<iostream>using namespace std;void swap(int &a,int &b){ a=a^b; b=a^b; a=a^b;}int p(int *a,int left,int right){ int i=left,j=right+1; int x=a[left]; while(1) { while(a[++i]<x&&i<=right); while(a[--j]>x&&j>=left); if(i>=j)break; swap(a[i],a[j]); } a[left]=a[j]; a[j]=x; return j;}int quicksort(int *a,int left,int right,int k){ if(left==right) return a[left]; int m=p(a,left,right); int j=m-left+1; if(k<=j) return quicksort(a,left,m,k); else return quicksort(a,m+1,right,k-j);}int main(){ int a[10]={1,5,8,2,1,0,3,9,8,4}; int k; cin>>k; cout<<quicksort(a,0,9,k)<<endl; return 0;}
int quicksort(int* a, int left, int right, int k){ if(left == right) return a[left]; int m = p(a, left, right); int j = m + 1; if(k < j) return quicksort(a, left, m, k); else if(k > j) return quicksort(a, m + 1, right, k); return a[j-1];}