Pyth, 17 byte
uXGhaf>FT.:G2]Z)Q
Berpindah item dalam daftar benar-benar mahal di Pyth. Jadi, inilah solusi yang menyenangkan, yang sedikit meregangkan aturan. Itu mungkin tidak valid.
Cobalah secara online: Pyth Compiler / Executor
Penjelasan
Pertama-tama, kompleksitas waktu kode saya adalah O(n^3). Tapi ini bukan bagian yang menarik. Pertanyaannya tidak mengatakan apa pun tentang kerumitannya.
Bagian penting adalah, bagaimana saya mengganti dua elemen dalam daftar. Katakanlah saya ingin mengganti elemen m[3]dan m[4]. Saya tidak peduli dengan indeks 3dan 4sama sekali. Saya cukup membuat daftar kedua, yang menggantikan setiap elemen sama m[3]dengan angka m[4]dan setiap angka sama m[4]dengan nilai m[3]. Karena daftar tidak mengandung duplikat, ini mensimulasikan beralih dua nilai ini. Jika ada duplikat, seperti pada input [1, 3, 2, 2], hasilnya akan menjadi [1, 2, 3, 3]. Dan jika Anda memberi input [1, 2, 1], itu akan berakhir dalam loop yang tak terbatas. Saya tidak secara eksplisit membuat daftar kedua, itu hanya bagian dari implementasi Pyth tentang metode translate. Jika Anda mencetak daftar saat ini ( lihat di sini), ini memberikan nilai yang benar, yang Anda harapkan.
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