|
以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (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=39708) |
|
-- 作者:computerlover -- 发布时间:11/4/2006 11:40:00 PM -- 数据结构教材第七章内排序的错误与改进 关于对教材第七章算法7.15的改进 关于第七章归并排序一节中的优化归并排序(算法7.15)
1. 为什么不把DoSort( )函数的代码直接放到Sort( )函数里,而是在Sort( )函数外
2. 优化后的算法是不用像算法7.10(我认为此处应该是算法7.14)那样需要检查子序列是否结束. 但它增加了比较的次数. 算法7.14中当一个子序列的元素插入完后,另一个子序列中的元素直接插入到Array[]中,而不需要比较.
1. 为什么不把DoSort( )函数的代码直接放到Sort( )函数里 答:这个早就勘误了的。不知道出版社为什么翻来覆去总搞错。
答: 比较算法7.14和7.15,首先,二者的赋值运算都是一样的,对于长度为n的待排序序列,merge一次则赋值2n次(一轮倒入临时数组为n次赋值,一轮每个值都从临时数组归并到位为n次赋值) 不同的是比较次数; (1)在处理完一个子串之前 算法7.14每次合并操作都有三个比较运算: while ((index1 <= middle)&& (index2 <= right)) 和if (Compare::le(TempArray[index1], TempArray[index2])) 而7.15在处理完一个子串之前,每次合并操作都只有一个比较运算if (Compare::le(TempArray[index1], TempArray[index2])) 这里的运算代价显然7.14高于7.15 (2)某一个子串处理完之后, 算法7.15对每次合并操作也有一个比较运算,if (Compare::le(TempArray[index1], TempArray[index2])) 这里的运算代价7.14与7.15相同 答:这里没有问题,不是错误!效果是等价的。赋初值的习惯不同而已,教材算法多赋一次初值。
[此贴子已经被作者于2006-11-5 18:56:00编辑过]
|
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
4,214.844ms |