Задача - написать функцию сортировки списка.
Текущее решение такое:
def sort(not_sorted_list: list) -> list:
not_sorted_list = not_sorted_list[:]
for _ in range(len(not_sorted_list)):
for index, element in enumerate(not_sorted_list):
try:
next_element = not_sorted_list[index+1]
currect_element = not_sorted_list[index]
if next_element < currect_element:
not_sorted_list[index] = next_element
not_sorted_list[index+1] = currect_element
except IndexError:
break
sorted_list = not_sorted_list[:]
return sorted_list
data = [4, 354, 1, 4, 1, -10, 20]
sorted_list = sort(data)
print(data) # [4, 354, 1, 4, 1, -10, 20]
print(sorted_list) # [-10, 1, 1, 4, 4, 20, 354]
Проблема в следующем:
За один цикл:
for index, element in enumerate(not_sorted_list)
Полностью отсортировать список не выходит.
Для этого добавлен внешний цикл:
for _ in range(len(not_sorted_list)):
Но если брать именно длину списка, то цикл работает в холостую определенное количество циклов. В частности, даже при округленном
длинна/1.5
сортировка завершается успешно.
Собственно вопрос в следующем - существует ли способ заранее понять, сколько итераций потребуется?
Если такого нет, что в принципе, ожидаемо, единственный вариант - сравнивать список "до" итерации и "после". Но в таком случае, не будет ли затраты на подобные сравнения "затратнее" холостых циклов?