Untuk menjelaskan mengapa skrip Anda tidak berfungsi saat ini, saya akan mengganti nama variabel unsorted
menjadi sorted
.
Pada awalnya, daftar Anda belum diurutkan. Tentu saja, kami mengatur sorted
untuk False
.
Segera setelah kami memulai while
loop, kami menganggap bahwa daftar sudah diurutkan. Idenya adalah ini: begitu kita menemukan dua elemen yang tidak dalam urutan yang benar, kita sorted
kembali ke False
. sorted
akan 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 for
lingkaran, Anda menggunakan variabel element
. Secara teknis, element
bukan elemen; itu nomor yang mewakili indeks daftar. Juga, ini cukup panjang. Dalam kasus ini, cukup gunakan nama variabel sementara, seperti i
untuk "indeks".
for i in range(0, length):
The range
perintah 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.)