013.【ソートアルゴリズム】マージソート法

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

おすすめ

転載: blog.csdn.net/qq_42226855/article/details/131227380