Pitão, 17 bytes
uXGhaf>FT.:G2]Z)Q
Trocar itens de uma lista é realmente caro em Pyth. Então, aqui está uma solução divertida, que estende um pouco as regras. Provavelmente não é válido.
Experimente online: Pyth Compiler / Executor
Explicação
Primeiro de tudo, a complexidade do tempo do meu código é O(n^3)
. Mas essa não é a parte interessante. A pergunta não diz nada sobre a complexidade.
A parte crítica é como eu alterno dois elementos na lista. Digamos que eu queira mudar os elementos m[3]
e m[4]
. Eu não me importo com os índices 3
e 4
nada. Eu simplesmente crio uma segunda lista, que substitui todos os elementos iguais ao m[3]
número m[4]
e todos os números iguais ao m[4]
valor m[3]
. Como a lista não contém duplicatas, isso simula a troca desses dois valores. Se houvesse duplicatas, como na entrada [1, 3, 2, 2]
, a saída seria [1, 2, 3, 3]
. E se você der a entrada [1, 2, 1]
, ela terminará em um loop infinito. Não crio explicitamente a segunda lista, é apenas parte da implementação do método de conversão por Pyth. Se você imprimir as listas atuais ( veja aqui), fornece os valores corretos que você esperaria.
implicit: Q = input list
u Q set G = Q, update G as long with the following statements,
until it stops changing:
.:G2 all pairs (G[i],G[i+1])
f>FT filter for pairs T, where T[0] > T[1]
a ]Z add to this list of pairs [0]
(ensures that the filtered list is always non-empty)
h take the first element
XG ) translate G by this pair (switches the values T[0] with T[1])
print implicitly at the end