算法导论中9.3节关于最坏情况线性时间查找算法
最近在看 算法导论
读到第九章9.3 最坏情况线性时间的选择;
的阶梯思路 是在看不太懂,请高人指点,
吧逻辑关系讲清楚一些;
用伪码或者C/C++也可以 先谢谢了。
[解决办法]
接分:)
[解决办法]
接分:p
[解决办法]
void k_element(vector<int> &a, int first, int nth, int last){ //a是所要查找的数组,first是第一个元素,last是最后一个元素, //nth是需要查找的第n个元素 if (last - first > threshold){//如果小于,则使用插入排序直接排序 int m = plen / 2, k = first;//plen是每组的数目,算法导论中为5 for (int i = first, i <= last, i += plen){ k_element(a, i, m, i + plen); std::swap(a[k++], a[i+m]);//将每一组的中位数都置换到数组的前面 } int mid = (first + k) / 2; k_element(a, first, mid, k);//现在数组的前k个数是数组的每组的中位数 //再通过此方法查找中位数的中位数 mid = partition(a, first, a[mid]); //使用中位数的中位数对原数组进行划分,返回一个值mid if (mid <= nth){ k_element(a, mid, nth, last); //判断mid与nth的大小确定其继续与 //数组的哪一边进行比较 } else { k_element(a, first, nth, mid); } }