在本文中,我们将讨论不同排序技术的重要属性,包括它们的复杂性,稳定性和内存限制。在理解本文之前,您应该了解各种排序技术的基础(请参阅:排序技术)。
时间复杂度分析–
我们已经讨论了不同排序技术在可能的情况下的最佳,平均和最坏情况的复杂性。
基于比较的排序–
在基于比较的排序中,将数组中的元素相互比较以找到排序后的数组。
- 气泡排序和插入排序–
平均和最坏情况下的时间复杂度:n ^ 2
最佳情况下的时间复杂度:n已对数组进行排序时。
最坏的情况:对数组进行反向排序时。 - 选择排序–
最佳,平均和最坏情况下的时间复杂度:n ^ 2,与数据分布无关。 - 合并排序–
最佳,平均和最坏情况下的时间复杂度:nlogn,与数据分布无关。 - 堆排序–
最佳,平均和最坏情况下的时间复杂度:nlogn,与数据分布无关。 - 快速排序–
这是一种具有递归关系的分而治之的方法:T(n) = T(k) + T(n-k-1) + cn
最坏的情况:当对数组进行排序或反向排序时,分区算法会将数组分为两个子数组,分别包含0和n-1个元素。所以,
T(n) = T(0) + T(n-1) + cn Solving this we get, T(n) = O(n^2)
最佳情况和平均情况:平均而言,分区算法将数组分成大小相等的两个子数组。所以,
T(n) = 2T(n/2) + cn Solving this we get, T(n) = O(nlogn)
基于非比较的排序–
在基于非比较的排序中,不将数组元素相互比较以找到排序后的数组。
- 基数排序–
最佳,平均和最坏情况下的时间复杂度:nk其中,k是数组元素中的最大位数。 - 计数排序–
最佳,平均和最坏情况下的时间复杂度:n + k,其中k是计数数组的大小。 - 桶分类–
最佳和平均时间复杂度:n + k,其中k是存储桶数。
最坏情况下的时间复杂度:如果所有元素都属于同一存储桶,则为n ^ 2。
就地/就地技术–
如果不使用任何额外的内存对数组进行排序,则排序技术就位。
在讨论的基于比较的技术中,只有合并排序才是替代技术,因为它需要一个额外的数组来合并排序后的子数组。
在讨论的基于非比较的技术中,所有都是替代技术。计数排序使用计数数组,存储桶排序使用哈希表对数组进行排序。
在线/离线技术–
如果排序过程可以在进行过程中接受新数据,即不需要完整的数据来启动排序操作,则该排序技术被视为“在线”。
在讨论的基于比较的技术中,只有插入排序才符合条件,因为它使用的是底层算法,即它从左到右处理数组(不只是元素),并且如果在右边添加新元素,则不会影响正在进行的操作。
稳定/不稳定的技术–
如果排序技术不更改具有相同值的元素的顺序,则它是稳定的。
在基于比较的技术之外,冒泡排序,插入排序和合并排序是稳定的技术。选择排序不稳定,因为它可能会更改具有相同值的元素的顺序。例如,考虑数组4、4、1、3。
在第一次迭代中,找到的最小元素为1,并在第0个位置与4交换。因此,相对于第一位置的4的4阶将改变。同样,快速排序和堆排序也是不稳定的。
在基于非比较的技术中,计数排序和存储桶排序是稳定的排序技术,而基数排序的稳定性取决于用于排序的基础算法。
分析排序技术:
- 当数组几乎排序时,插入排序可能是首选。
- 当输入顺序未知时,首选合并排序,因为它具有最坏情况下nlogn的时间复杂度,并且也是稳定的。
- 对数组进行排序时,插入和冒泡排序的复杂度为n,而快速排序的复杂度为n ^ 2。
e – 1.当输入数组的所有元素都相同时,哪种排序算法将花费最少的时间?考虑排序算法的典型实现。
(A)插入排序
(B)堆排序
(C)合并排序
(D)选择排序
解决方案:如前所述,当输入数组已经排序时,插入排序将具有n的复杂度。
队列– 2.考虑Quicksort算法。假设有一个查找数据透视元素的过程,该元素将列表分成两个子列表,每个子列表至少包含元素的五分之一。令T(n)为对n个元素进行排序所需的比较次数。然后,(GATE-CS-2012)
(A)T(n)<= 2T(n / 5)+ n
(B)T(n)<= T(n / 5)+ T(4n / 5)+ n
(C)T(n)<= 2T(4n / 5)+ n
(D)T(n)<= 2T(n / 2)+ n
解决方案:快速排序的复杂性可以写成:
T(n) = T(k) + T(n-k-1) + cn
如所讨论的,一个列表包含元素总数的1/5。因此,另一个列表将具有总元素的4/5。放价值,我们得到:
T(n)= T(n / 5)+ T(4n / 5)+ cn,它与选项(B)相匹配。
时空复杂度比较表:
Sorting Algorithm | Time Complexity | Space Complexity | ||
---|---|---|---|---|
Best Case | Average Case | Worst Case | Worst Case | |
Bubble Sort | Ω(N) | Θ(N2) | O(N2) | O(1) |
Selection Sort | Ω(N2) | Θ(N2) | O(N2) | O(1) |
Insertion Sort | Ω(N) | Θ(N2) | O(N2) | O(1) |
Merge Sort | Ω(N log N) | Θ(N log N) | O(N log N) | O(N) |
Heap Sort | Ω(N log N) | Θ(N log N) | O(N log N) | O(1) |
Quick Sort | Ω(N log N) | Θ(N log N) | O(N2) | O(N log N) |
Radix Sort | Ω(N k) | Θ(N k) | O(N k) | O(N + k) |
Count Sort | Ω(N + k) | Θ(N + k) | O(N + k) | O(k) |
Bucket Sort | Ω(N + k) | Θ(N + k) | O(N2) | O(N) |