#python #insertion-sort
#python #вставка-сортировка
Вопрос:
Итак, я попытался и получил [1, 2, 3, 5, -4] но я хочу получить [3, 1, 2, 5, -4] вместо этого в качестве результата; потому что я хочу сортировать только от индекса 1 до индекса 4 (включая начало, исключая конец; что означает только сортировкуот индекса 1 до индекса 3, оставляя индексы 0 и 4 как есть) списка
def insertionSort(the_list, start, end):
for mark in range(start, end):
temp = the_list[mark]
i = mark-1
while i >= 0 and the_list[i] > temp:
the_list[i 1] = the_list[i]
i -= 1
the_list[i 1] = temp
return the_list
print(insertionSort([3, 2, 5, 1, -4], 1, 4))
Может кто-нибудь помочь мне исправить код, чтобы я мог получить желаемый результат? Спасибо.
Ответ №1:
Вам нужно нарезать раздел, который вы хотите отсортировать. Вот как я бы реализовал.
def insertionSort(alist,s, e):
#check if s or e is greater than the length of the list
if s >= len(alist) or e >= len(alist):
#if True, then request is invalid
return ('invalid request')
#sort the list for the slice of data
alist[s:e] = sorted(alist[s:e])
# now return the full list
# The above code ensures you are not touching values before and after
return alist
print (insertionSort([3, 2, 5, 1, -4], 1, 4))
Результатом этого будет:
[3, 1, 2, 5, -4]
Объяснение проблем в вашем коде:
Ваш цикл for начинается от начала до конца. Однако вы проверяете значения из start — 1 (код i = mark — 1). Когда отметка равна 1 (начало), вы устанавливаете значение i равным 0 (отметка — 1, т.Е. 1 — 1 = 0). Это заставляет ваш код учитывать 0-ю позицию. Вот почему вы получаете 1, 2, 3, 5, -4
результат.
Кроме того, если вы зададите значение, превышающее количество элементов в списке, ваш код выйдет из строя. Вы также должны позаботиться об этом условии. Например, если вы дадите print (insertionSort([3, 2, 5, 1, -4], 1, 7))
, код завершится сбоем.