首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

算法导论中9.3节关于最坏情况线性时间查找算法,该如何处理

2012-03-18 
算法导论中9.3节关于最坏情况线性时间查找算法最近在看 算法导论读到第九章9.3 最坏情况线性时间的选择;的

算法导论中9.3节关于最坏情况线性时间查找算法
最近在看 算法导论
读到第九章9.3 最坏情况线性时间的选择;
的阶梯思路 是在看不太懂,请高人指点,
吧逻辑关系讲清楚一些;
用伪码或者C/C++也可以 先谢谢了。



[解决办法]
接分:)
[解决办法]
接分:p
[解决办法]

C/C++ code
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);        }    } 

热点排行