摘要:
2.3.29随机化。用经验性的研究对比随机选择切分元素和正文所述的一开始就将数组随机化这两处策略的效果。在子数组大小为M时进行切换,将大小为N的不重复数组排序,其中M=10、20和50,N=10^3、10^4、10^5和10^6。答:由于生成的待排序数组本身已是随机化,方式1在排序前打乱一次数组需要 阅读全文
摘要:
2.3.27忽略小数组。用实验对比以下处理小数组的方法和练习2.3.25的处理方法的效果:在快速排序中直接忽略小数组,仅在快速排序结束后运行一次插入排序。注意:可以通过这些实验估计出电脑的缓存大小,因为当数组大小超出缓存时这种方法的性能可能会下降。public class E2d3d27{ publ 阅读全文
摘要:
2.3.28递归深度。用经验性的研究估计切换阀值为M的快速排序在将大小为N的不重复数组排序时的平均递归深度,其中M=10、20和50,N=10^3、10^4、10^5和10^6。答:通过测试数据得平均递归深度为2.679lg(N/M)public class E2d3d28{ public stat 阅读全文
摘要:
2.3.26子数组大小。编写一个程序,在快速排序处理大小为N的数组的过程中,当子数组的大小小于M时,排序方法需要切换为插入排序。将子数组的大小绘制成直方图。用N=10^5,M=10、20和50测试你的程序。M=10时M=20时M=50时import java.awt.Color;public cla 阅读全文
摘要:
2.3.25切换到插入排序。实现一个快速排序,在子数组元素少于M时切换到插入排序。用快速排序处理大小N分别为10^3、10^4、10^5和10^6的随机数组,根据经验给出使其在你的计算环境中运行速度最快的M值。将M从0变化到30的每个值所得到的平均运行时间绘成曲线。注意:你需要为算法2.2添加一个需 阅读全文
摘要:
2.3.23Java的排序库函数。在练习2.3.22的代码中使用Tukey's ninther方法来找出切分元素--选择三组,每组三个元素,分别取三组元素的中位数,然后取三个中位数的中位数作为切分元素,且在排序小数组时切换到插入排序。public class E2d3d23{ public stat 阅读全文
摘要:
2.3.24取样排序。(W.Frazer,A.McKellar)实现一个快速排序,取样大小为2^k-1.首先将取样得到的元素排序,然后在递归函数中使用样品的中位数切分。分为两部分的其余样品元素无需再次排序并可以分别应用于原数组的两个子数组。这种算法被称为取样排序。2.3.24 Samplesort. 阅读全文