- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
嗯,我前几天问了一个关于排序的问题。我发现了如何通过对 8 个元素进行排序来证明最少的比较次数是 16,并且我明白了原因。但是我的合并排序算法计算了 17 次比较,在我的例子中它是正确的。要合并两个长度分别为 x 和 y 的已排序数组,我们需要 (x+y)-1 次比较,因此在合并排序中我们得到 17 次比较。但必须有 16 次比较,所以..如何?我在哪里可以保存那 1 个比较)。
这是一张图片:
谢谢!
最佳答案
OP 包含一个明确的证据,证明 8 个元素的合并排序 少于 17 次比较是不可能的。与其他算法相比,仍然可以在 16 次比较中对 8 个元素进行排序。该算法在 D.Knuth 的“计算机编程艺术”第 3 卷第 5.3.1 章中有所描述。它被命名为合并插入。
最少的比较次数并不能使该算法成为最快的算法。例如,Batcher odd–even mergesort进行 19 次比较很容易胜过合并插入,因为它并行执行大多数比较。
关于algorithm - 8个元素的归并排序只需要16次比较怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688022/
本文实例汇总了Java各种排序算法。分享给大家供大家参考,具体如下: 1. 冒泡排序: ?
1.冒泡排序 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 算法步
前言 平时用惯了高级语言高级工具高级算法,难免对一些基础算法感到生疏。但最基础的排序算法中实则蕴含着相当丰富的优化思维,熟练运用可起到举一反三之功效。 选择排序 选择排序几乎是
我是一名优秀的程序员,十分优秀!