Python版归并排序算法(附Python程序__name__属性用法演示视频)

2016-11-26 董付国 Python小屋 Python小屋

import random


def mergeSort(seq, reverse=False):    

    #把原列表分成两部分

    mid = len(seq) // 2

    left, right = seq[:mid], seq[mid:]


    #根据需要进行递归

    if len(left) > 1:

        left = mergeSort(left)

    if len(right) > 1:

        right = mergeSort(right)


    #现在前后两部分都已排序

    #进行合并

    temp = []

    while left and right:

        if left[-1] >= right[-1]:

            temp.append(left.pop())

        else:

            temp.append(right.pop())

    temp.reverse()    

    result = (left or right) + temp

    

    #根据需要进行逆序

    if reverse:

        result.reverse()

    return result


#测试

for i in range(100000):

    #生成随机测试数据

    reverse = random.choice((True, False))

    x = [random.randint(1,100) for i in range(20)]

    y = sorted(x, reverse=reverse)

    x = mergeSort(x, reverse)

    if x!=y:

        print('error')


附:Python程序的__name__属性作用与用法演示视频