У меня есть неупорядоченный массив, состоящий из последовательных целых чисел [1, 2, 3, ..., n]
без каких-либо дубликатов. Разрешено менять любые два элемента. Мне нужно найти минимальное количество перестановок, необходимое для сортировки массива в порядке возрастания.
Начиная с первого элемента списка, я пытаюсь расположить их в правильном положении (например, если первый элемент равен 7, он должен быть на 6-й позиции списка). Чтобы перейти по одному в списке, я делаю копию и делаю обмен во втором списке.
a = [4,3,1,2]
b = a[:]
swap = 0
for p in a:
if (p!= b[p-1]):
b[p-1], b[b.index(p)] = b[b.index(p)], b[p-1]
swap+=1
print(swap)
этот код работает, за исключением случая, когда мне нужно поменять местами два элемента в списке, позиция которых равна 0 или 1, в данном случае. что я не понимаю почему ?? так как я не превышаю лимит.
Может кто-нибудь объяснить мне, почему это происходит?
Например, если я напечатаю p, два индекса, где происходит свопинг, обновленный список b и обновленное количество свопов:
p = 4
idx1= 3 idx2= 0
b= [2, 3, 1, 4]
swap = 1
p = 3
idx1= 2 idx2= 1
b= [2, 1, 3, 4]
swap = 2
p = 1
idx1= 0 idx2= 1
b= [2, 1, 3, 4]
swap = 3
p = 2
idx1= 1 idx2= 0
b= [1, 2, 3, 4]
swap = 4
В этом случае вы можете видеть, что для p = 1, когда индексы равны 0 и 1, обмен не происходит.
Я изменил порядок b [p-1], b [b.index (p)], и у меня больше нет той же проблемы, но я не понимаю причину.