数据结构与算法-归并排序

简介: 数据结构与算法-归并排序

归并排序:

       归并排序是一种分治算法,它的原理是将待排序的数组不断分割成更小的子数组,直到每个子数组只有一个元素为止,然后将这些子数组按照大小顺序合并起来,最终得到一个有序的数组。

具体步骤如下:

  1. 将待排序的数组分成两个子数组,然后分别对这两个子数组进行归并排序。
  2. 将两个已经排序好的子数组合并成一个有序的数组。这里需要一个额外的数组来存放合并后的结果。
  3. 重复以上步骤,直到所有的子数组都合并成一个完整的有序数组。

代码实现:

n=int(input())  #要排序的数组的长度
ls=list(map(int,input().split())) # 输入要排序的数组
def MergeSort(ls):
    if len(ls)<=1:
        return ls
    mid = int(len(ls)/2)  # 对原列表进行分治
    llist,rlist=MergeSort(ls[:mid]),MergeSort(ls[mid:]) #再次分治调用自身 缩短要排序的长度
    result=[]
    i,j=0,0
    while  i<len(llist) and j<len(rlist):
        if rlist[j]<llist[i]:
            result.append(rlist[j])
            j+=1
        else:
            result.append(llist[i])
            i+=1
    result += llist[i:]+rlist[j:]
    return result
for j in MergeSort(ls): #输出结果
    print(j,end=' ')

复杂度:

       归并排序是一种稳定的排序算法,时间复杂度为O(nlogn),空间复杂度为O(n)。它的主要优点是可以对链表等非随机访问的数据结构进行排序,并且在最坏情况下的时间复杂度也是O(nlogn)。

相关文章
|
19天前
|
机器学习/深度学习 算法 搜索推荐
【初阶算法4】——归并排序的详解,及其归并排序的扩展
【初阶算法4】——归并排序的详解,及其归并排序的扩展
【初阶算法4】——归并排序的详解,及其归并排序的扩展
|
1月前
|
算法 前端开发 搜索推荐
前端算法之归并排序
前端算法之归并排序
18 0
|
2天前
|
搜索推荐 算法 Java
Java中的快速排序、归并排序和堆排序是常见的排序算法。
【6月更文挑战第21天】Java中的快速排序、归并排序和堆排序是常见的排序算法。快速排序采用分治,以基准元素划分数组并递归排序;归并排序同样分治,先分割再合并有序子数组;堆排序通过构建堆来排序,保持堆性质并交换堆顶元素。每种算法各有优劣:快排平均高效,最坏O(n²);归并稳定O(n log n)但需额外空间;堆排序O(n log n)且原地排序,但不稳定。
14 3
|
17天前
|
搜索推荐
深入理解数据结构第六弹——排序(3)——归并排序
深入理解数据结构第六弹——排序(3)——归并排序
|
19天前
|
存储 算法 搜索推荐
【数据结构】归并排序的非递归写法和计数排序
【数据结构】归并排序的非递归写法和计数排序
|
23天前
|
存储 搜索推荐 算法
归并排序算法深入解析
归并排序算法深入解析
|
1月前
|
存储 搜索推荐 算法
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
|
16天前
|
算法 C语言
数据结构和算法——归并排序(有序子列的归并、递归算法、非递归算法、思路图解、C语言代码)
数据结构和算法——归并排序(有序子列的归并、递归算法、非递归算法、思路图解、C语言代码)
10 0
|
29天前
|
人工智能 算法 C++
c++算法学习笔记 (2)归并排序
c++算法学习笔记 (2)归并排序
|
1月前
|
算法 数据可视化 搜索推荐
[数据结构]———归并排序
[数据结构]———归并排序