1. マージソート方法
マージソート方法は、マージによって 2 つ以上のソートされた数値を 1 つの大きなソートされた数値系列に結合します。1 つ目は、順序のないシーケンスをいくつかの小さな部分に分割することです。いくつかの部分に分割するルールは、各セグメントの長さを分割できなくなるまで 2 で分割し、分割されたシーケンスをソートします。最後に、ソートされた大きな数値列に徐々にマージします。マージ ソート方法の最終結果にも、昇順と降順の 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('------------------------------------------------------') # 输出分界符