快速排序是一种基于分治策略的内部算法。在此:
- 元素数组被反复分割,直到无法进一步分割为止。
- 它也被称为“分区交换排序” 。
- 它使用一个关键元素(枢轴)来划分元素。
- 一个左分区包含所有小于主元的元素,一个右分区包含所有大于关键元素的元素。
归并排序是一种外部算法,基于分治策略。在此:
- 元素被一次又一次地拆分为两个子数组 (n/2),直到只剩下一个元素。
- 合并排序使用额外的存储对辅助数组进行排序。
- 合并排序使用三个数组,其中两个用于存储每一半,第三个外部数组用于通过合并其他两个来存储最终排序的列表,然后对每个数组进行递归排序。
- 最后,合并所有子数组,使其成为数组的“n”个元素大小。
快速排序与归并排序
- 数组中元素的分区:
在归并排序中,数组被分成两半(即 n/2)。
然而
在快速排序的情况下,数组被分成任意比例。在快速排序中没有强制将元素数组分成相等的部分。 - 最坏情况复杂度:
快速排序的最坏情况复杂度为 O(n2),因为在最坏情况下需要进行大量比较。
然而
在归并排序中,最坏情况和平均情况具有相同的复杂度 O(n log n)。 - 使用数据集:
归并排序适用于任何类型的数据集,无论其大小(大或小)。
然而
快速排序不适用于大型数据集。 - 额外的存储空间要求:
归并排序没有到位,因为它需要额外的内存空间来存储辅助数组。
然而
快速排序已经到位,因为它不需要任何额外的存储空间。 - 效率:
在较大的数组大小或数据集的情况下,合并排序比快速排序更有效并且工作得更快。
然而
在较小的数组大小或数据集的情况下,快速排序比合并排序更有效,工作速度更快。 - 排序方法:
快速排序是内部排序方法,其中数据在主内存中排序。
然而
归并排序是一种外部排序方法,其中要排序的数据无法容纳在内存中,需要辅助内存进行排序。 - 稳定性:
合并排序是稳定的,因为具有相等值的两个元素在排序输出中的出现顺序与它们在输入未排序数组中的顺序相同。
然而
在这种情况下,快速排序是不稳定的。但是可以通过对代码进行一些更改来使其稳定。 - 首选:
数组首选快速排序。
然而
链表首选合并排序。 - 参考地点:
快速排序表现出良好的缓存局部性,这使得快速排序比合并排序更快(在许多情况下,例如在虚拟内存环境中)。
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. | In the merge sort, the array is parted into just 2 halves (i.e. n/2). |
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 |