【 归并排序~python实现】


归并排序

# -*- coding = utf-8 -*-
# @Time : 2022/5/19 19:15
# @Author : lxw_pro
# @File : py-20.py
# @Software : PyCharm

# 归并排序:

'''
归并的基本思想:
归并是指将若干个已排序好的有序表合并成一个有序表。
两个有序表的归并并称为二路归并。即:
将两个位置相邻的有序子序列R1[1...m]和R2[m+1...n]归并为一个有序序列R[1...n]。

归并排序的过程:
将待排序的n个记录,看作n个有序的子序列,每个子序列的长度为1.然后两两归并,得到n/2个长度为2或1的子序列;
在两两归并,...,如此重复,直到得到长度为n的子序列为止。这种排序的方法称为2路归并排序。

'''

# 整个归并排序需要[log2n]趟。


def mer(lia, lib):      # 二路归并
    lic = []            # 存储一个空列表
    d = e = 0
    while d < len(lia) and e < len(lib):
        if lia[d] < lib[e]:
            lic.append(lia[d])
            d += 1      # 循环增加一次,不可或缺
        else:
            lic.append(lib[e])
            e += 1      # 循环,同上
    if d == len(lia):
        for i in lib[e:]:
            lic.append(i)
    else:
        for i in lia[d:]:
            lic.append(i)
    return lic


def mer_sort(li):       # 归并排序
    if len(li) <= 1:    # 如果元素只有一个或者少于一个
        return li       # 输出原有的即可
    mid = len(li) // 2  # 找到中间元素,一定要整除(//)
    left = mer_sort(li[:mid])   # 左边的元素
    right = mer_sort(li[mid:])  # 右边的元素
    return mer(left, right)


li = [13, 14, 52, 2, 5, 9]
print(mer_sort(li))

算法分析:

'''
1-每趟归并的时间复杂度为O(n),整个算法需log2n趟。
时间复杂度为O(nlog2n)
2-归并排序算法虽然简单,
但占用辅助空间大,实用性差。
3-归并排序是一个稳定排序。

'''

上一章链接:基数排序


江湖一现:

不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。


持续更新中…

猜你喜欢

转载自blog.csdn.net/m0_66318554/article/details/124783142