基本上我看到我在youtube上的视频可视化排序算法,他们提供了程序,以便我们可以玩它..并且程序计算两个主要的东西(比较,数组访问)..我想看看哪一个(合并和快速)排序是最快的..
100个随机数
快速排序:
比较1000
数组访问1400
合并排序:
比较540
数组访问1900
如此快速排序使用较少的数组访问,而合并排序使用较少的比较,差异随着索引的数量而增加..那么其中哪一个更难用于计算机呢?
答案 0 :(得分:0)
数字已关闭。实际运行的结果有100个随机数。请注意,快速排序比较计数受实施影响,Hoare比Lomuto使用更少的比较。
快速排序(Hoare分区方案)
pivot reads 87 (average)
compares 401 (average)
array accesses 854 (average)
合并排序:
compares 307 (average)
array accesses 1400 (best, average, worst)
由于数字正在排序,我假设它们适合寄存器,这减少了数组访问。
为了快速排序,比较完成与一个数据透视值的比较,每个快速排序的递归实例应该只读取一次,并放在一个寄存器中,然后对每个值进行一次读取比较。优化编译器可以保留寄存器中用于比较的值,以便交换已经在寄存器中具有两个值,并且只需要进行两次写入。
对于合并排序,比较会为数组访问增加几乎为零的开销,因为比较的值将被读入寄存器,进行比较,然后从寄存器写入,而不是再次从内存中读取。
答案 1 :(得分:0)
排序性能取决于许多条件,我认为回答您的确切问题不会导致有用的答案(您可以自己轻松地对其进行基准测试)。
在您的示例中,快速排序算法在大多数情况下可能更快。如果比较更复杂,例如字符串而不是int或多个字段,MergeSort将变得越来越有效,因为它需要更少(昂贵)的比较。如果你想要对排序进行并行化,MergeSort是因为算法本身而预定的。