Untuk menjelaskan mengapa skrip Anda tidak berfungsi saat ini, saya akan mengganti nama variabel unsortedmenjadi sorted.
Pada awalnya, daftar Anda belum diurutkan. Tentu saja, kami mengatur sorteduntuk False.
Segera setelah kami memulai whileloop, kami menganggap bahwa daftar sudah diurutkan. Idenya adalah ini: begitu kita menemukan dua elemen yang tidak dalam urutan yang benar, kita sortedkembali ke False. sortedakan tetap True hanya jika tidak ada elemen dalam urutan yang salah .
sorted = False # We haven't started sorting yet
while not sorted:
sorted = True # Assume the list is now sorted
for element in range(0, length):
if badList[element] > badList[element + 1]:
sorted = False # We found two elements in the wrong order
hold = badList[element + 1]
badList[element + 1] = badList[element]
badList[element] = hold
# We went through the whole list. At this point, if there were no elements
# in the wrong order, sorted is still True. Otherwise, it's false, and the
# while loop executes again.
Ada juga masalah kecil kecil yang akan membantu kode menjadi lebih efisien atau mudah dibaca.
Dalam forlingkaran, Anda menggunakan variabel element. Secara teknis, elementbukan elemen; itu nomor yang mewakili indeks daftar. Juga, ini cukup panjang. Dalam kasus ini, cukup gunakan nama variabel sementara, seperti iuntuk "indeks".
for i in range(0, length):
The rangeperintah juga dapat mengambil hanya satu argumen (bernama stop). Dalam hal ini, Anda mendapatkan daftar semua bilangan bulat dari 0 hingga argumen itu.
for i in range(length):
The Python Style Guide merekomendasikan bahwa variabel diberi nama dalam huruf kecil dengan garis bawah. Ini adalah nitpick yang sangat kecil untuk skrip kecil seperti ini; itu lebih untuk membuat Anda terbiasa dengan apa yang paling mirip dengan kode Python.
def bubble(bad_list):
Untuk menukar nilai dua variabel, tulislah sebagai tugas tuple. Sisi kanan akan dievaluasi sebagai tupel (katakanlah, (badList[i+1], badList[i])adalah (3, 5)) dan kemudian ditugaskan ke dua variabel di sisi kiri ( (badList[i], badList[i+1])).
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
Kumpulkan semuanya, dan Anda mendapatkan ini:
my_list = [12, 5, 13, 8, 9, 65]
def bubble(bad_list):
length = len(bad_list) - 1
sorted = False
while not sorted:
sorted = True
for i in range(length):
if bad_list[i] > bad_list[i+1]:
sorted = False
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
bubble(my_list)
print my_list
(Omong-omong, saya menghapus pernyataan cetak Anda.)