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('------------------------------------------------------') # 输出分界符