比较排序是否必须比较A [i]最大值和A [i + 1]最大值?我认为任何比较都必须,但我不确定。我已经检查了mergesort,插入排序和快速排序,并且在每个中都必须比较A [i]最大值和A [i + 1]最大值。
答案 0 :(得分:2)
每个正确的算法都必须比较相邻的单元格,除非它们相等。证明:另有说明。最终阵列中的A [i]和A [i + 1]尚未进行比较(A [i]< A [i + 1]。如果他们的位置在原始数组中交换会发生什么?算法进行的所有比较都得到与原始运行(*)相同的结果,因此它执行相同的排列,因此它们的最终位置被交换,因此它使算法不正确。
(*)这是因为A [i]和A [j]相邻。
答案 1 :(得分:1)
是的,在任何比较排序中,相邻的单元格将始终相互比较。有关比较排序下限的更精确定义,请参阅this page。
答案 2 :(得分:1)
是的,除非至少有3个相同的元素。如果不这样做,就无法保证你有正确的排序。避免比较所有对的唯一方法是通过传递原则。
A[i] > A[j] and A[j] > A[k] implies A[i] > A[k].
对于不同的连续值,没有中间值可以帮助您避免比较。
答案 3 :(得分:1)
Shell排序不比较相邻的单元格。这是他们如何获得一些效率而不是慢速排序(气泡,插入,选择)。
答案 4 :(得分:0)
Quicksort和Mergesort将始终比较相邻元素。只有时间两个元素不进行比较,是算法知道中间有一个元素。我认为大多数其他 O ( n log n )排序算法也是如此。
答案 5 :(得分:0)
我怀疑没有。考虑一组完全由一个值的重复组成的值。它们被分成2组A和B,使得组A中的值不大于组B中的任何值。然后将它们自身分类。不需要比较A的值结束和B的开始。
我不知道是否有任何实际的例子,但考虑一下很有趣。
答案 6 :(得分:0)
对于这类问题(非常类似于更一般的比较 - 排序 - 是 - n-log-n方法),(迷你)“对手”参数会有效 - 尝试打破任何算法,在某些输入上,没有做出这样的比较。
这个想法非常类似于更普遍的“比较排序需要O(n log n)比较”证明,所以我想你最近已经看过或者即将在你的班级中介绍它。
答案 7 :(得分:0)
因为我的英语,对不起..我不会说英语。
@see动画排序算法:http://vision.bc.edu/~dmartin/teaching/sorting/anim-html/all.html
此网站显示8种评分算法的比较:插入·选择·泡泡·壳牌·合并·堆·快速·快速3