以下哪一种就地排序算法需要最少的交换次数?
(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)交换的Build-heap之后,它将执行n-1个min-min提取操作,从而产生O(nlogn)交换。
请参阅https://www.geeksforgeeks.org/data-structures-and-algorithms-set-7/的问题3
该解决方案由Pranjul Ahuja提供
这个问题的测验