数据结构-8.5排序

前言-数据结构

数据结构是需要反复咀嚼,不管什么时候都可以重中获取现在在开发中的遇到的问题答案。

归并排序

  • 基本原理:通过对两个或两个以上的有序结点序列的合并来实现排序。
    • 2-路归并排序
    • 多路归并排序

2路归并排序

  • 基本思想

  • 假设初始的对象序列有n个数据对象,我们首先把它看成是n个长度为1的有序子序列,先做两两归并,得到n/2个 长度为2的归并项(如果n为奇数,则最后一 个有序子序列的长度为1) ;再做两两归并,… 如此重复,最后得到一个长度为n的有序序列。

  • 算法步骤

  • 将当前序列-分为二,求出分裂点mid= L(low + high)/2」:

  • 对子序列R[low, mid]递归,进行归并排序,结果放入S[low, mid]中:

  • 对子序列R[mid+1, high]递归,进行归并排序,结果放入S[mid+1, high]中:

  • 将有序的两个子序列S[low, mid]和Smid+1, high归并为一个有序序列T[low, high].

  • 例子
    在这里插入图片描述

  • 性能分析

  • 通常情况下2路归并排序的时间复杂度为0(nlog2n)。

  • 2-路归并排序所需的空间开销为一个与原待排序对象数组同样大小的辅助数组。所以它的空间复杂度为0(n)。

  • 2-路归并排序是种稳定 的排序方法。

  • 由于二路归并排序中,每两个有序表合并成一个有序表时,若分别在两个有序表中出现有相同排序码,则会使前一个有序表中相同排序码先复制,后一.有序表中相同排序码后复制,从而保持它们的相对次序不会改变。所以,二路归并排序是一种稳定的排序方法。

多路归并排序

  • 将三个或三个以上有序子区间合并成一 个有序子区间的排序,称为多路归并排序。常见的有三路归并排序(三个有序子区间合并成一个有序子区间)、四路归并排序(四个有序子区间合并成一个有序子区间)等,具体实现的方法与二路归并排序类似,在此,不再赘述。

猜你喜欢

转载自blog.csdn.net/weixin_41732253/article/details/109894577
今日推荐