Используя 1-индексированный список,
Взяв список, содержащий те же элементы, что и в примере, приведенном в вопросе:
[0,10,9,8,7,6, 5,4,3,2,1] # Добавлен 0 впереди, чтобы сделать список 1-проиндексированным
Step1: взять последний индекс списка ... как итератор
Step2: Выполняется некоторое время l oop, пока значение итератора не станет больше 0
Step3: Если элемент в итераторе совпадает с value, то мы должны уменьшить значение итератора, так как нет необходимости выполнять операцию свопинга.
Step4: Если элемент не совпадает, поменяйте местами элемент со значением его индекса и увеличиваем количество операций на 1. Нет необходимости уменьшать значение итератора, поскольку это может быть случай, когда значение, которое мы получили в позиции итератора, может не совпадать с его индексом ...
Время Сложность решения: O (2 * N) ~~ O (N) .
arr = [0,10, 1, 2, 3, 4, 5, 6, 7, 8, 9]
iterator = 10
count_of_operations = 0
while(iterator>0):
index_to_swap = arr[iterator]
if(index_to_swap == iterator):
iterator = iterator - 1
else:
arr[iterator],arr[index_to_swap] = arr[index_to_swap],arr[iterator]
count_of_operations = count_of_operations + 1
print(count_of_operations)