📜  门| GATE-CS-2016(Set 2)|问题23

📅  最后修改于: 2021-06-30 01:01:42             🧑  作者: Mango

假设此处考虑的算法以升序对输入序列进行排序。如果输入已经按升序排列,那么以下哪项是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)[最佳情况]这个问题的测验