以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 计算机考研交流 』 (http://bbs.xml.org.cn/list.asp?boardid=67) ---- 问一个对排序的比较次数问题 (http://bbs.xml.org.cn/dispbbs.asp?boardid=67&rootid=&id=55567) |
-- 作者:xiuluodao -- 发布时间:11/18/2007 10:53:00 PM -- 问一个对排序的比较次数问题 第7章32题中说用堆排序执行序列 {503,017,512,908,170,897,275,653,612,154,509,612,677,765,094} 答案上说:建堆要比较(2*4)+(2*1+2*2)+(2*1+2*1+2*1)=20次 有没有谁能解释一下为什么这么算,要熄灯了,只能打这么多了! |
-- 作者:zewixi -- 发布时间:11/19/2007 4:26:00 PM -- 初始数组的树形结构如下: 503 / \ / \ / \ / \ / \ / \ / \ / \ 017 512 / \ / \ / \ / \ / \ / \ 908 170 897 275 / \ / \ / \ / \ / \ / \ / \ / \ 653 612 154 509 612 677 765 094 |
-- 作者:zewixi -- 发布时间:11/19/2007 4:41:00 PM -- 1、每个3结点的单位子树(根结点和左右子结点)按照SiftDown算法调整成堆需要且只需要比较2次(先是左右子结点比较选出较小者,然后较小者再与根结点比较); 2、第2层(根为第0层)4棵子树调整成堆,需要比较2*4次;第3层的094和154被交换到了第2层; 3、第1层2棵子树调整成堆,右边的那棵需要将094往上调,故需要2次对单位子树进行建堆,所以需要比较2*2次;而左边那棵,由于根结点017显然是整棵子树的最小值了,故已经是堆了,只需要1次对单位子树进行建堆,比较2*1次; 4、同理分析根结点503,它显然是往右子树下调,观察各值,503会被调整到叶结点去,需要进行3次单位子树建堆,比较2*3=2*1+2*1+2*1次; 所以总次数为 (2*4)+(2*1+2*2)+(2*1+2*1+2*1)=20次 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
35.156ms |