【 归并排序~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-归并排序是一个稳定排序。

'''

上一章链接:基数排序


江湖一现:

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


持续更新中…

归并排序是一种高效的排序算法,采用分治法的一个典型应用。它将一个数组分成两半,分别对它们进行排序,然后将结果合并起来。归并排序在合并过程中会将两个有序数组合并成一个更大的有序数组。 以下是归并排序一个Python实现示例: ```python def merge_sort(arr): if len(arr) <= 1: return arr # 将数组分成左右两部分,并对它们进行排序 mid = len(arr) // 2 left = merge_sort(arr[:mid]) right = merge_sort(arr[mid:]) # 合并两个有序数组 return merge(left, right) def merge(left, right): merged_arr = [] left_index, right_index = 0, 0 # 遍历两个数组,按顺序将元素添加到新的数组中 while left_index < len(left) and right_index < len(right): if left[left_index] <= right[right_index]: merged_arr.append(left[left_index]) left_index += 1 else: merged_arr.append(right[right_index]) right_index += 1 # 如果左边或右边数组还有剩余的元素,直接将它们添加到新数组中 merged_arr.extend(left[left_index:]) merged_arr.extend(right[right_index:]) return merged_arr # 测试 if __name__ == "__main__": test_array = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] sorted_array = merge_sort(test_array) print(sorted_array) ``` 这段代码首先定义了`merge_sort`函数,它通过递归的方式将数组分成更小的部分,并对每一部分调用`merge_sort`。当数组不能继续分割时(长度小于等于1),返回数组本身。然后通过`merge`函数将两个有序数组合并成一个更大的有序数组。
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值