上图是算法导论第三版第九章9.3所给出的步骤,根据这个步骤可以得到下面的代码
/* 找中位数,只有五个数,直接排序取中间那个即可 */
int findMedian(vector<int> & nums, const int & left, const int & right) {
sort(nums.begin() + left, nums.begin() + right);
return nums[(left + right) >> 1];
}
/* 线性时间选择第 k 小的数字 */
int linerTimeSelect(vector<int> & nums, const int & left, const int & right, const int & k) {
if (right – left < 75) {
sort(nums.begin() + left, nums.begin() + right);
return nums[left + k];
}
/* 五个数字一组 */
int nGroupCount = (right - left) / 5;
/* 中位数集合 */
vector<int> medians(nGroupCount);
for (int i = 0; i < nGroupCount; ++i) {
medians[i] = findMedian(nums, left + i * 5, left + (i + 1) * 5);
}
int nMedian = linerTimeSelect