假设此处考虑的算法以升序对输入序列进行排序。如果输入已经按升序排列,那么以下哪项是TRUE?
I. Quicksort runs in Θ(n2) time
II. Bubblesort runs in Θ(n2) time
III. Mergesort runs in Θ(n) time
IV. Insertion sort runs in Θ(n) time
(A)仅I和II
(B)仅I和III
(C)仅II和IV
(D)仅I和IV答案: (D)
说明: I.给定一个升序排列的数组,quicksort的比较总数的递归关系将为
T(n)= T(n-1)+ O(n)//在任何情况下,分区算法都将进行O(n)比较。
= O(n ^ 2)
二。气泡排序以Θ(n ^ 2)的时间运行
如果数组按升序排列,我们可以在Bubble Sort Inner for循环中进行小的修改,该修改负责将第k个最大的元素冒泡到第k次迭代的末尾。只要在任何迭代中完成冒泡排序的内部for循环后没有任何交换,我们就可以声明在冒泡排序在最佳情况下花费O(n)时间的情况下对数组进行了排序。
三,合并排序以Θ(n)时间运行
合并排序依赖于“分而治之”范例对数组进行排序,并且没有用于合并排序的最坏情况或最佳情况输入。对于任何序列,时间复杂度将通过以下递归关系给出,
T(n)= 2T(n / 2)+Θ(n)//由于复制整个数组,就地合并算法将取Θ(n)。
=Θ(nlogn)
IV。插入排序以Θ(n)时间运行
每当添加一个比中间排序的子数组的所有元素都要大的新元素时(因为给定的数组已排序),就不会有交换,只有一个比较。在n-1个传递中,我们将进行0次交换和n-1个比较。
总时间复杂度= O(n)// N-1个比较
该解决方案由Pranjul Ahuja提供
////
对于已经按升序排序的数组,
Quicksort的复杂度为Θ(n 2 )[最坏情况]
Bubblesort的复杂度为Θ(n)[最佳情况]
Mergesort的复杂度为Θ(n log n)[任何情况]
Insertsort的复杂度为Θ(n)[最佳情况]这个问题的测验