Python: сортировка слиянием в порядке возрастания и убывания - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь реализовать сортировку слиянием в Python, которая сортирует либо по возрастанию, либо по убыванию в зависимости от параметра, который вы передаете.Я работал с двумя отдельными функциями, но я не могу заставить его работать в одной функции.

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

Простое переключение> в операторе if сделает его нисходящим, но если я попытаюсь сделать оба водна функция, это всегда портит мой результат.Есть предложения?

1 Ответ

0 голосов
/ 11 июня 2018
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
...