以下哪一种就地排序算法需要最少的交换次数?
(A)快速排序
(B)插入排序
(C)选择排序
(D)堆排序答案: (C)
解释:
让我们尝试分析每个给定排序算法中的交换次数。
快速排序– 最大交换次数的最坏情况输入将已按降序排序数组。
在这种情况下,交换总次数的重复次数:
T(n) = T(n-1) + O(n) // O(n) 交换将发生在对分区算法的交替调用中。
= O(n2)
插入排序– 最大交换次数的最坏情况输入将已按升序排序数组。当一个新元素插入已排序的 k 大小数组时,它可能导致 k 交换(如果它是所有数组中最小的) ) 在最坏的情况下。对于插入排序的 n-1 次迭代,总交换次数将为 O(n2)。
选择排序– 选择排序没有最坏情况输入。由于它在第 k 次迭代中搜索第 k 个最小元素的索引,然后在一次交换中,它将该元素放置到其正确位置。对于选择排序的 n-1 次迭代,它可以有 O(n) 次交换。
堆排序 – 堆排序中的交换总数可以是 O(nlogn),因为在执行可能需要 O(n) 交换的构建堆之后,它执行 n-1 次提取最小操作,导致 O(nlogn) 交换。
参见 https://www.geeksforgeeks.org/data-structures-and-algorithms-set-7/ 的问题 3
此解决方案由Pranjul Ahuja 提供
这个问题的测验