自己犯错的坑点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);
}
};