Это мой первый вопрос, поэтому я принимаю любые / все советы, если мой вопрос сформулирован неправильно.
Прежде всего, проблема:
Скажем, у нас есть следующий массив A= [(1, 'кошка'), (1, 'собака'), (0, 'жираф'), (0, 'гепард'), (1, 'слон')]]
Мне нужноиспользовать алгоритм, который будет сортировать этот список на основе первого элемента каждого компонента (имеется в виду число).В частности, упоминается, что он не обязательно должен быть устойчивым алгоритмом (я полагаю, это означает, что нам не нужно рассматривать сортировку слов после числа, только нули перед всеми 1)
IТакже следует упомянуть, что я не хочу использовать стратегии создания боковых массивов, которые я буду заполнять результатами по мере их сортировки алгоритмом.Требуется, чтобы алгоритм сортировал массив в том же массиве.
Код, который я разработал, следующий:
def SwapAround(A, start, end):
start_pos = start
for i in range(start,end):
if A[i] < A[end]:
A[i], A[start_pos] = A[start_pos], A[i]
start_pos = start_pos + 1
A[start_pos], A[end] = A[end], A[start_pos]
return start_pos
A=[(1,'cat'),(0,'dog'),(1,'kangaroo'),(0,'mule'),(1,'giraffe'),(1,'dog'),
(0,'bat')]
SwapAround(A,0,len(A) - 1)
print(A)
У меня довольно специфические проблемы с ним, хотя яЯ вполне уверен, что он должен работать (по крайней мере, шаг за шагом, код имел смысл для меня).
Код сортирует список, но не полностью ... например, мой последнийвывод был:
[(0, 'bat'), (0, 'dog'), (1, 'kangaroo'), (0, 'mule'), (1, 'giraffe'), (1, 'dog'), (1, 'cat')]
С меньшим списком он действительно сработал, и я удивился, когда проснулся этим утром, чтобы добавить еще пару компонентов в свой список, и он не работает.
Не могли бы вы сказать мне, если вы видите что-то легко «неправильное», что я должен рассмотреть, и обоснование этого, чтобы я мог полностью понять это.
Второй вопрос: если бы я хотел добавить компоненты к своемусписок, который также имеет число 2 (то есть мой алгоритм должен будет сортировать между 0,1,2 вместо 0 и 1), если бы вы использовали совершенно другой алгоритм или плечобуду обмениваться еще работать?Первоначально я думал, что обмен не будет работать должным образом (и это не работает с этим алгоритмом), и, возможно, CountingSort или RadixSort будут работать лучше, поэтому ваш вклад будет очень признателен.