先决条件:合并排序,插入排序
合并排序:是一种外部算法,基于分而治之策略。在这种排序中:
- 元素一次又一次地分成两个子数组(n / 2) ,直到只剩下一个元素为止。
- 合并排序使用额外的存储空间对辅助阵列进行排序。
- 合并排序使用三个数组,其中两个用于存储每个一半,第三个外部一个用于通过合并其他两个来存储最终的排序列表,然后对每个数组进行递归排序。
- 最后,将所有子数组合并以使其成为数组的’n’个元素大小。
下面是说明合并排序的图像:
插入排序是一种排序算法,其中,元素是从未排序的项目中取出的,然后按已排序的顺序将其插入其他项目的前面,然后重复进行直到所有项目都按顺序进行。该算法易于实现,通常包含两个循环:一个用于选择项目的外循环和一个用于遍历数组的内循环。它的工作原理是对我们手中的扑克牌进行分类。
下面的图像说明了插入排序:
合并排序和插入排序之间的区别:
- 时间复杂度:在合并中,最坏的情况为O(N * log N) ,平均情况为O(N * log N) ,最佳情况为O(N * log N) ,
然而
在插入时,对最坏情况: O(N 2 ) ,平均情况: O(N 2 )和最佳情况: O(N)进行排序。 - 空间复杂度:递归的合并排序占用了O(N)的辅助空间复杂度,因此它比内存有问题的地方更不可取,
然而
在插入排序中,仅占用O(1)辅助空间复杂度。只需使用一个额外的变量就可以对整个数组进行排序。 - 数据集:合并排序是处理大型数据集的首选。碰巧比较数组中存在的所有元素,因此对于小型数据集并没有太大帮助,
然而
对于较少的元素,首选插入排序。当数据已经排序或几乎排序时,它会变得很快,因为它会跳过排序后的值。 - 效率:考虑到两种算法的平均时间复杂度,我们可以说合并排序在时间方面很有效,而插入排序在空间方面很高效。
- 排序方法:合并排序是一种外部排序方法,其中无法将要排序的数据容纳在内存中,并且无法使用需要的辅助内存进行排序,
然而
插入排序基于这样的想法:每次迭代都会消耗输入元素中的一个元素,以找到其正确位置,即该元素在排序数组中的位置。 - 稳定性:合并排序是稳定的,因为两个相等值的元素在排序输出中的顺序与输入未排序数组中的顺序相同,
然而
在两个数据结构(数组和链接列表)上,插入排序都需要O(N 2 )时间。如果CPU具有高效的存储块移动函数,则阵列可能会更快。否则,可能没有那么多时差。
表格表示形式:
Parameters | Merge Sort | Insertion Sort |
---|---|---|
Worst Case Complexity | O(N*log N) | O(N2) |
Average Case Complexity | O(N*log N) | O(N2) |
Best Case Complexity | O(N*log N) | O(N) |
Auxiliary Space Complexity | O(N) | O(1) |
Works well on | On huge dataset. | On small dataset. |
Efficiency | Comparitively Efficient. | Comparitively Inefficient. |
Inplace Sorting | No | Yes |
Algorithm Paradigm | Divide and Conquer | Incremental Approach |
Uses | It is used for sorting linked list in O(N*log N), for Inversion Count problem, External sorting, etc. | It is used when number of elements is small. It can also be useful when input array is almost sorted, only few elements are misplaced in complete big array. |