データ構造とアルゴリズムpythonは高度なソートアルゴリズムを実装しています

分割統治法とマージソート
マージは、
分割統治法のより古典的なアプリケーションです。分割統治法の3つのステップ

  • 元の問題をいくつかのサブ問題に分解します。これらのサブ問題は元の問題の最小の例です。
  • これらのサブ問題を解決し、サブ問題を再帰的に解決します。ファイルの問題の規模は、直接解決できるほど小さいです。
  • これらのサブ問題の解決策とソース問題の解決策を組み合わせます
    。マージソート方法、3つのステップ:分解、解決、およびマージ
    時間計算量T(n)
#归并排序
def merge_sort(seq):
    #判断数组的长度是不是还可以再分
    if len(seq) <= 1:
        return  seq
    else:
        #数组二分之一的长度
        mid = int(len(seq) / 2)
        #从头开始到中间结束 ,调用自己传入二分之一个数组
        left_half = merge_sort(seq[:mid])
        #从中间开始到最后结束,调用自己传入二分之一个数组
        right_half = merge_sort(seq[mid:])

        #合并两个有序数组
        new_seq = merge_sorted_list(left_half,right_half)
        return  new_seq

#合并数组的实现方法 , 传入分好的数组
def merge_sorted_list(sorted_a,sorted_b):
    #把数组分别赋值给len_a,len_b
    length_a,length_b = len(sorted_a),len(sorted_b)
    a = b = 0#定义变量
    #定义一个新的集合
    new_sorted_seq = list()
    #当两个集合长度都大于0
    while a<length_a and b < length_b:
        #比较它们之间的第一个值
        if sorted_a[a] < sorted_b[b]:
            #a小于b就把a赋值给新的集合
            new_sorted_seq.append(sorted_a[a])
            #len_a下标加一
            a += 1
        else:
            #b小于a就把b赋值给新的数组
            new_sorted_seq.append(sorted_b[b])
            #len_b的下标加一
            b += 1

    #如果a中还有数据就
    while a < length_a:
        #就赋值给新的集合
        new_sorted_seq.append(sorted_a[a])
        #下标加一
        a += 1
    # 如果b中还有数据就
    while b < length_b:
        # 就赋值给新的集合
        new_sorted_seq.append(sorted_b[b])
        # 下标加一
        b += 1
    #返回排的集合
    return  new_sorted_seq

おすすめ

転載: blog.csdn.net/weixin_44865158/article/details/100797576