摘要:
2.1.32运行时间曲线图。编写一个测试用例,使用StdDraw在各种不同规模的随机输入下将算法的平均运行时间绘制成一张曲线图。可能需要添加一两个命令行参数,请尽量设计一个实用的工具。1)插入排序2)选择排序3)Shell排序public class E2d1d32{ public static d 阅读全文
摘要:
2.1.33分布图。对于你为练习2.1.33给出的测试用例,在一个无穷循环中调用sort()方法将由第三个命令行参数指定大小的数组排序,记录每次排序的用时并使用StdDraw在图上画出所有平均运行时间,应该能够得到一张运行时间的分布图。1)插入排序1000个元素2)插入排序10000个元素3)选择排 阅读全文
摘要:
2.1.31双倍测试。编写一个能够对排序算法进行双倍测试的用例。数组规模N的起始值为1000,排序后打印N、估计排序用时、实际排序用时以及在N增倍之后两次用时的比例。用这段程序验证在随机输入模型下插入排序和选择排序的运行时间都是平方级别的。对希尔排序的性能作出猜想并验证你的猜想。public cla 阅读全文
摘要:
2.1.29希尔排序的递增序列。通过实验比较算法2.3中所使用的递增序列和递增序列1,5,19,41,109,209,505,929,2161,3905,8929,16001,36289,64769,146305,260609(这是通过序列9*4^k-9*2^k+1和4^k-3*2^k+1综合得到的 阅读全文
摘要:
2.1.30几何级数递增序列。通过实验找到一个t,使得对于大小为N=10^6的任意随机数组,使用递增序列1,下取整(t),下取整(t^2),下取整(t^3),下取整(t^4),...的希尔排序的运行时间最短。给出你能找到的三个最佳t值以及相应的递增序列。t=5.31,递增序列:28 149 795 阅读全文
摘要:
2.1.27希尔排序的用时是次平方级的。在你的计算机上用SortCompare比较希尔排序和插入排序以及选择排序。测试数组的大小按照2的幂次递增,从128开始。shell排序的倍率是2.5,选择和插入都是在4.public class SortCompare{ public static doubl 阅读全文
摘要:
2.1.28相等的主键。对于主键仅可能取两种值的数组,评估和验证插入排序和选择排序的性能,假设两种主键值出现的概率相同。试验结果:插入排序用时只需选择排序的1/4,主要原因是插入排序在将元素放入到合适的位置时与有序元素不需要进行全部的比较,而选择排序会需要将元素与所有未排序的元素全部比较。1)使用相 阅读全文
摘要:
2.1.26原始数据类型。编写一个能够处理int值的插入排序的新版本,比较它和正文中所给出的实现(能够隐式地用自动装箱和拆箱转换Integer值并排序)的性能。答:原始数据类型相对对象类型约有15%以上的性能提升。public class Insertion{ public static void 阅读全文
摘要:
2.1.25不需要交换的插入排序。在插入排序的实现中使较大元素右移一位只需访问一次数组(而不用使用exch())。使用SortCompare来评估这种做法的效果。答:交换的成本较大,所以不交换方式性能提升10%public class Insertion{ public static void so 阅读全文
摘要:
2.1.23纸牌排序。请见位朋友分别将一副扑克牌排序(见练习2.1.13)。仔细观察并记录他们所使用的方法。答:实际玩牌过程中的排序并不会按照2.1.13设定那些规则。说一说可以看到牌面的情况下的排序。1)从桌上每次拿一张牌,一边插到手上时采用插入排序较多。2)从桌上每次拿一张但不看牌,直到所有的牌 阅读全文