面试OR笔试15——第k元素

来源:互联网 发布:网络电子设备数据处理 编辑:程序博客网 时间:2024/05/29 19:15

题目及要求

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];}




原创粉丝点击