在本文中,我们将讨论不同排序技术的重要属性,包括它们的复杂性、稳定性和内存限制。在理解本文之前,您应该了解不同排序技术的基础知识(请参阅:排序技术)。
时间复杂度分析——
我们已经在可能的场景中讨论了不同排序技术的最佳、平均和最坏情况复杂度。
基于比较的排序 –
在基于比较的排序中,数组的元素相互比较以找到已排序的数组。
- 冒泡排序和插入排序——
平均和最坏情况时间复杂度: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 交换。因此,第 1 个位置的 4 相对于 4 的顺序将发生变化。同样,快速排序和堆排序也不稳定。
在基于非比较的技术中,计数排序和桶排序是稳定的排序技术,而基数排序的稳定性取决于用于排序的底层算法。
分拣技术分析:
- 当数组几乎已排序时,可以首选插入排序。
- 当输入顺序未知时,首选归并排序,因为它的最坏情况时间复杂度为 nlogn,并且它也很稳定。
- 当数组排序时,插入和冒泡排序给出 n 的复杂度,但快速排序给出 n^2 的复杂度。
Que – 1.当输入数组的所有元素都相同时,哪种排序算法花费的时间最少?考虑排序算法的典型实现。
(A) 插入排序
(B) 堆排序
(C) 归并排序
(D) 选择排序
解决方案:如前所述,当输入数组已经排序时,插入排序的复杂度为 n。
Que – 2.考虑快速排序算法。假设有一个过程可以找到一个主元元素,它将列表分成两个子列表,每个子列表至少包含五分之一的元素。令 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(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) |