自己犯错的坑点QAQ
寻找第K大
http://www.nowcoder.com/questionTerminal/e016ad9b7f0b45048c58a9f27ba618bf
假的快排
class Finder { public: int serch(vector<int> &a,int l,int r,int k) { if(l == r) { return a[l]; } int i = l - 1,j = r + 1; int mid = (i + j) >> 1; while(i < j) { // 这个mid可能被我拿来交换了 // 这里这样写 mid可能变了 那么就会GG // 最好还是 int x = a[(l + r) >> 1] 这样保证一定是按照x分成两边的 do i++;while(a[i] < a[mid]); 、 do j--;while(a[j] > a[mid]); if(i < j) { swap(a[i],a[j]); } else break; } if((j - l + 1) >= k) return serch(a,l,j,k); else return serch(a,j + 1,r,k - (j - l + 1)); //l,j; //j + 1,r; } int findKth(vector<int> a, int n, int K) { return serch(a,0,n - 1,n - K + 1); } };