查找第K小的数
已知序列S=x1x2...xn以及整数K,k在1,n之间,查找S中第K小的数。
int partion(int *a, int i, int j)
{
int pivot = a[i];
int l = i, r = j;
int mid =0;
while(l < r){
while(a[l] <= pivot && l <= r){l++;}
while(a[r]>=pivot && r >= l){r++;}
if(l <= r)swap(a, l, r);
}
mid=r;
swap(a, l, mid);
return mid;
}
int select(int *ary, int i, int j, int k) { if(i == j) return i; else{ int mid = partion(ary, i, j); if(mid-i+1 >= k) select(ary, i, mid, k); else select(ary, mid+1, j, k-(mid-i+1)); } }

浙公网安备 33010602011771号