📜  不同分拣技术的分析

📅  最后修改于: 2021-09-27 22:46:21             🧑  作者: Mango

在本文中,我们将讨论不同排序技术的重要属性,包括它们的复杂性、稳定性和内存限制。在理解本文之前,您应该了解不同排序技术的基础知识(请参阅:排序技术)。

时间复杂度分析——
我们已经在可能的场景中讨论了不同排序技术的最佳、平均和最坏情况复杂度。

基于比较的排序 –
在基于比较的排序中,数组的元素相互比较以找到已排序的数组。

  • 冒泡排序和插入排序——
    平均和最坏情况时间复杂度: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)