Python:Merge按升序和降序排序

时间:2018-06-11 08:50:51

标签: python sorting merge mergesort

我试图在Python中实现合并排序,根据您提供的参数,按升序或降序排序。我使用了2个独立的函数,但我无法在一个函数中使用它。

def mergeSort(L, ascending = True):
    print('Mergesort, Parameter L:')
    print(L)
    result = []  
    if len(L) == 1:
        return L  
    mid = len(L) // 2  
    teilliste1 = mergeSort(L[:mid], ascending)  
    teilliste2 = mergeSort(L[mid:], ascending)  
    x, y = 0, 0
    while x < len(teilliste1) and y < len(teilliste2):
        if ascending:
            if teilliste1[x] > teilliste2[y]:
                result.append(teilliste2[y])
                y = y + 1
            else:
                result.append(teilliste1[x])
                x = x + 1
        else: 
            if teilliste1[x] < teilliste2[y]:
                result.append(teilliste2[y])
                y = y + 1
            else:
                result.append(teilliste1[x])
                x = x + 1
    result = result + teilliste1[x:]
    result = result + teilliste2[y:]
    return result

mergeSort(list, True) # sort in ascending order
mergeSort(list, False) # sort in descending order

只需翻转&gt;在if语句中会使它降序但如果我尝试在一个函数中同时执行,它总是会弄乱我的结果。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

def mergeSort(L, ascending = True):
    result = []  
    if len(L) == 1:
        return L  
    mid = len(L) // 2

    teilliste1 = mergeSort(L[:mid])

    teilliste2 = mergeSort(L[mid:])

    x, y = 0, 0
    while x < len(teilliste1) and y < len(teilliste2):
        if teilliste1[x] > teilliste2[y]: # < for descending
            result.append(teilliste2[y])
            y = y + 1

        else:
            result.append(teilliste1[x])
            x = x + 1


    result = result + teilliste1[x:]

    result = result + teilliste2[y:]
    if ascending == True :
        return result
    else:
        result.reverse()
        return result

list=[3,2,4,1,5,9,7,6]
print(list)
print(mergeSort(list, True) )# sort in ascending order