【算法-1】排序算法-归并排序,附python代码+注释

这篇博客介绍了归并排序的基本原理,通过递归将序列不断分区,直至每个分区只有一个元素,然后使用合并策略将有序小分区组合成整体有序序列。文章提供了详细的Python代码示例,并附有注释帮助理解。
摘要由CSDN通过智能技术生成

概述

归并排序就是把待排序的分为左右两份,而左右两份分别再分成左右两份,如此递归下去,直到每一份只有一个元素(只有一个元素,那么这一份肯定是有序的)。再结合合并方法(将两个有序的列表合并成一个有序的列表),最终完成排序。
递归分区示意图如下:

在这里插入图片描述

合并示意图如下:
在这里插入图片描述
在此感谢CoderJed在简书上的图示分享,引用地址

https://www.jianshu.com/p/33cffa1ce613

python示例代码

看完这个代码,相信理解会更深,代码的注释也能让你更好理解

# 归并排序(将两个有序的列表合并成一个有序的列表方法+递归方法)

import random


def merge_sort(items, comp=lambda x, y: x <= y):  # 把lambda函数直接放在函数参数里
    """归并排序(分治法)"""
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于归并排序Python 实现代码: ```python def merge_sort(arr): if len(arr) <= 1: return arr # 将 arr 分成左右两个部分 mid = len(arr) // 2 left_half = arr[:mid] right_half = arr[mid:] # 递归对左右两个部分进排序 left_half = merge_sort(left_half) right_half = merge_sort(right_half) # 合并左右两个已经排好序的子序列 return merge(left_half, right_half) def merge(left_half, right_half): result = [] left_index = right_index = 0 # 比较左右两个子序列的元素,依次放入 result 中 while left_index < len(left_half) and right_index < len(right_half): if left_half[left_index] < right_half[right_index]: result.append(left_half[left_index]) left_index += 1 else: result.append(right_half[right_index]) right_index += 1 # 如果左右两个子序列有剩余的元素,则将其全部放入 result 中 if left_index < len(left_half): result.extend(left_half[left_index:]) if right_index < len(right_half): result.extend(right_half[right_index:]) return result # 测试代码 arr = [5, 2, 7, 1, 4, 3, 6] sorted_arr = merge_sort(arr) print(sorted_arr) ``` 归并排序是一种基于分治思想的排序算法,它的主要思想是将一个大问题拆分成多个规模更小、结构相同的子问题,通过递归的方式求解子问题,最终将子问题的解合并为原问题的解。 在这个实现中,我们首先将输入的数组拆分成两个子序列,并递归地对每个子序列进排序。然后,我们使用一个 `merge` 函数来合并这两个已经排好序的子序列。最终,我们得到的就是一个排好序的完整数组。 注释已经加在代码中,希望可以帮助你理解归并排序的实现过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值