Сортировка слиянием: как сортировать по убыванию? - PullRequest
0 голосов
/ 17 июня 2019

Я заинтересован в сортировке слиянием.Я написал шаг слияния для сортировки в порядке возрастания, и он работает (см. Код ниже).Но когда я пытаюсь адаптировать свой код так, чтобы он сортировался по убыванию, я не могу этого сделать.Я хотел поменять местами i и j, но это не сработало.У кого-нибудь есть идеи?

def fusion(A,low,mid,high):
    aux = [2,7,8,3,6,9]
    i = low
    j = mid+1
    for k in range(low,high,1):
        if i>mid:
            A[k] = aux[j]
            j = j+1
        elif j > high:
            A[k] = aux[i]
            i = i+1
        elif aux[i] <= aux[j]:
            A[k] = aux[i]
            i = i+1
        else:
            A[k] = aux[j]
            j = j+1
    return A
fusion([2,7,8,3,6,9],0,2,5)

Вывод 2,3,6,7,8,9 но хотелось бы 9,8,7,6,3,2

1 Ответ

0 голосов
/ 17 июня 2019

Вот «обратный» вариант:

def fusion(A, low, mid, high):
    aux = A[::-1]  # reverse A
    i = low
    j = mid + 1
    for k in range(low, high, 1):
        if i > mid:
            aux[-k - 1] = A[j]
            j += 1
        elif j > high:
            aux[-k - 1] = A[i]
            i += 1
        elif A[i] <= A[j]:
            aux[-k - 1] = A[i]
            i += 1
        else:
            aux[-k - 1] = A[j]
            j += 1
    return aux


print(fusion([2, 7, 8, 3, 6, 9], low=0, mid=2, high=5))

Или просто наоборот range():

def fusion(A, low, mid, high):
    aux = A[::-1]  # reverse A
    i = low
    j = mid + 1
    for k in range(high, low, -1):
        if i > mid:
            aux[k] = A[j]
            j += 1
        elif j > high:
            aux[k] = A[i]
            i += 1
        elif A[i] <= A[j]:
            aux[k] = A[i]
            i += 1
        else:
            aux[k] = A[j]
            j += 1
    return aux

Или просто ...

list(reversed(fusion([2, 7, 8, 3, 6, 9], 0, 2, 5)))
...