快速排序是一种基于分而治之的内部算法。在此:
- 元素数组被重复地分成多个部分,直到不可能进一步划分为止。
- 也称为“分区交换排序” 。
- 它使用键元素(枢轴)对元素进行分区。
- 一个左分区包含所有小于枢轴的元素,而一个右分区包含所有大于键元素的元素。
合并排序是一种外部算法,它基于分而治之策略。在此:
- 元素一次又一次地分成两个子数组(n / 2),直到只剩下一个元素为止。
- 合并排序使用额外的存储空间对辅助阵列进行排序。
- 合并排序使用三个数组,其中两个用于存储每个一半,第三个外部一个用于通过合并其他两个来存储最终的排序列表,然后对每个数组进行递归排序。
- 最后,将所有子数组合并以使其成为数组的’n’个元素大小。
快速排序与合并排序
- 数组中元素的分区:
在合并排序中,将数组分成两半(即n / 2)。
然而
在快速排序的情况下,数组可以分成任意比例。不必强制将元素数组快速分类为相等的部分。 - 最坏情况下的复杂性:
快速分类的最坏情况复杂度为O(n2),因为在最坏条件下需要进行大量比较。
然而
在合并排序中,最坏情况和平均情况具有相同的复杂度O(n log n)。 - 数据集的用法:
合并排序可以在任何类型的数据集上都能很好地工作,而不论其大小(大小)。
然而
快速排序不适用于大型数据集。 - 额外的存储空间要求:
合并排序没有到位,因为它需要额外的存储空间来存储辅助阵列。
然而
快速排序已经到位,因为它不需要任何其他存储。 - 效率:
在较大数组大小或数据集的情况下,合并排序比快速排序更有效且工作更快。
然而
在较小的数组或数据集的情况下,快速排序比合并排序更有效且工作更快。 - 排序方式:
快速排序是内部排序方法,其中数据在主内存中排序。
然而
合并排序是一种外部排序方法,其中要排序的数据无法容纳在内存中,并且无法使用需要的辅助内存进行排序。 - 稳定性:
合并排序是稳定的,因为具有相等值的两个元素在排序输出中的顺序与输入未排序数组中的顺序相同。
然而
在这种情况下,快速排序是不稳定的。但是可以通过对代码进行一些更改来使其稳定。 - 首选用于:
快速排序是数组的首选。
然而
合并排序是链接列表的首选。 - 参考地点:
Quicksort具有良好的缓存局部性,这使Quicksort的速度比合并排序的速度快(在许多情况下,例如在虚拟内存环境中)。
Basis for comparison | Quick Sort | Merge Sort |
---|---|---|
The partition of elements in the array |
The splitting of a array of elements is in any ratio, not necessarily divided into half. | The splitting of a array of elements is in any ratio, not necessarily divided into half. |
Worst case complexity |
O(n2) | O(nlogn) |
Works well on |
It works well on smaller array | It operates fine on any size of array |
Speed of execution |
It work faster than other sorting algorithms for small data set like Selection sort etc | It has a consistent speed on any size of data |
Additional storage space requirement |
Less(In-place) | More(not In-place) |
Efficiency |
Inefficient for larger arrays | More efficient |
Sorting method |
Internal | External |
Stability |
Not Stable | Stable |
Preferred for |
for Arrays | for Linked Lists |
Locality of reference |
good | poor |