数据结构与算法 python实现 高级排序算法

分治法与归并排序
归并是分治法比较经典的应用
分治法的三步骤

  • 分解原问题成若干子问题,这些子问题是原问题最小的实例
  • 解决这些子问题,递归的求解子问题,档子问题的规模足够小可以直接求解
  • 合并这些子问题的解,成源问题的解
    归并排序法,三步:分解,解决,合并
    时间复杂度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
今日推荐