先决条件:归并排序、插入排序
归并排序:是一种外部算法,基于分治策略。在这个排序中:
- 元素被一次又一次地分成两个子数组(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. |
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。