#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
.