013.【排序算法】合并排序法

1. 合并排序法

合并排序法是针对已经排序好的两个或两个以上的数列,通过合并的方式,将其组合成一个大的且排序好的数列。首先是将无序的数列分成若干小份,分若干份的规则就是不断把每段长度除以2(对半分),直到分到不能再分为止,然后对分好的数列进行排序,最后再逐步合并成一个排序好的大数列。合并排序法最后的结果也有两种形式,即递增数列和递减数列。
在这里插入图片描述

2. 使用合并排序法进行递增排序

使用合并排序法为列表:33,10,49,78,57,96,66,21进行排序。具体代码如下:

def merge_sort(data):                                	# 自定义合并排序法函数

    if len(data) <= 1:                             		# 判断列表元素是否小于或等于1    
        return data                                 	# 当列表元素只有一个的时候,直接返回
    mid = len(data) // 2                               	# 分隔长度计算,整个数据的长度除以2取整
    left = data[:mid]                                  	# 左半边数据
    right = data[mid:]                                	# 右半边数据
    left = merge_sort(left)                             # 调用merge_sort()函数继续对左半边分隔并排序
    right = merge_sort(right)                           # 调用merge_sort()函数继续对右半边分隔并排序
    # 递归地进行排序
    result = []                                      	# 用来存储结果值
    while left and right:                               # 循环合并,判断条件是:左下标和右下标是否为真
        if left[0] <= right[0]:                      	# 判断左边数小于右边数
            result.append(left.pop(0))             		# 结果增加left[0]的值
        else:
            result.append(right.pop(0))             	# 结果增加right[0]的值
    if left:                                        	# 如果left的值为真
        result += left                                	# 结果显示左侧数据
    if right:                                       	# 如果right的值为真
        result += right                              	# 结果显示右侧数据
    return result                                    	# 返回排序后的结果


data = [33, 10, 49, 78, 57, 96, 66, 21]            		# 创建数列并初始化

print("原始数据为:", data)                           					# 输出原始数据
print('------------------------------------------------------')     	# 输出分界符
print("排序之后的数据为:", merge_sort(data))         						# 调用函数,输出排序好的数据
print('------------------------------------------------------')      	# 输出分界符

猜你喜欢

转载自blog.csdn.net/qq_42226855/article/details/131227380