1 题目及要求
1.1 题目描述
求一个序列的第k大小的元素值。
2 解答
2.1 代码
int partition_m(int *v, int left, int right) {
if(right < left) return left;
for (int k1(left); k1 < right; ++k1) {
if (v[k1] < v[right]) swap(v[left++], v[k1]);
}
swap(v[left], v[right]);
return left;
}
int kthNum1(int *v, int beg, int end, int k){
if(k < 0 || end - beg < k) return 0;
int mid = partition_m(v,beg,end);
if(mid-beg == k) return v[mid];
if(mid-beg < k) return kthNum1(v,mid+1,end,k-mid-1);
else return kthNum1(v,beg,mid-1,k);
}
int kthNum1(int *v, int n, int k){
return kthNum1(v,0,n-1,k-1);
}
int kthNum2(int *v, int vn, int k){
if(vn < k) return 0;
--k;
int lo(0), up(vn-1), mid(partition_m(v,lo,up));
while(k != mid){
if(k < mid) up = mid-1;
else lo = mid+1;
mid = partition_m(v,lo,up);
}
return v[k];
}