python算法9.9——归并排序

# 把待排序序列分为若干个子序列,将子序列排序后,再把有序子序列合并为整体有序序列。
# 采用分治思想(diveide and conquer)是一种典型的递归排序方法。
# 基本原理(升序):
# 1.分:利用递归将序列不断二分,最终形成单元素序列
# 2.治:将序列进行排序后组合
# 3.不断递归形成最终序列
# 实现过程:利用中间值将序列不断分解,分解后进行排序,排序时将子序列合并排序,并将排序结果存入新序列
# 参考:
# https://blog.csdn.net/rytyy/article/details/78720562;
# https://blog.csdn.net/su_bao/article/details/81053871

import random

def divide(list):
    if len(list)<=1:
        return list
    else:
        mid = len(list)//2
        left = divide(list[:mid])
        right = divide(list[mid:])
    return conquer(left,right)

def conquer(list_left, list_right):
    final = []
    a,b = 0,0
    while a<len(list_left) and b<len(list_right):
        if list_left[a] < list_right[b]:
            final.append(list_left[a])
            a += 1
        else:
            final.append(list_right[b])
            b += 1
    final += list_left[a:]
    final += list_right[b:]
    return final


if __name__ == '__main__':
    Range = 100
    Length = 5

    list = random.sample(range(Range), Length)  # 在指定序列中随机获取指定长度片段
    print('before sort:', list)

    list = divide(list)
    print('after sort:',list)

猜你喜欢

转载自blog.csdn.net/nominior/article/details/82563516