查找第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));     } }

 

posted @ 2014-04-07 20:53  清尘2010  阅读(224)  评论(0)    收藏  举报