Проблема с сортировкой слиянием

#python #sorting #recursion #mergesort

#python #сортировка #рекурсия #сортировка слиянием

Вопрос:

Я пытаюсь запустить сортировку слиянием, используя python и рекурсию, в некоторых случаях она работает нормально, в большинстве случаев не работает нормально, пожалуйста, поправьте меня, я пытался и не смог найти ошибку в коде.

 def merge_sort(a, min, max):
    if max - min < 2:
        return a[min:max]

    mid = (min   max) // 2
    L = merge_sort(a, min, mid)
    R = merge_sort(a, mid, max)
    return (sort(L, R))

def sort(L, R):
    (c, m, n) = ([], len(L), len(R))
    (i, j) = (0, 0)
    while (i   j < m   n):
        if i == m:
            c.append(R[j])
            j  = 1
        elif j == m:
            c.append(L[i])
            i  = 1
        elif R[j] <= L[i]:
            c.append(R[j])
            j  = 1
        elif L[i] < R[j]:
            c.append(L[i])
            i  = 1
    return c
  

Комментарии:

1. Привет, это для какого-то назначения? Я спрашиваю, потому что алгоритм сортировки уже реализован во многих библиотеках, таких как numpy

Ответ №1:

У вас там опечатка, она должна быть j==n во втором случае.

Следующий элемент не является ошибкой, но обычно предпочтение отдается элементу equal, исходящему из левого аргумента, а не правому, чтобы сортировка была стабильной (не меняйте порядок элементов без необходимости). Таким образом, вам также необходимо переключить <= и < сравнения в двух других случаях.

Именование также важно. sort Функция действительно sorted_merge .