Kabarcık Sıralama Ödev
Sınıfta sıralama algoritması yapıyoruz ve onlar hakkında konuşmak ve yalancı yazarken onları gayet iyi anlıyorum, ancak sorunlar onlar için gerçek kod yazarak geçiriyorum.
Bu Python denemem
mylist = [12, 5, 13, 8, 9, 65]
def bubble(badList):
length = len(badList) - 1
unsorted = True
while unsorted:
for element in range(0,length):
unsorted = False
if badList[element] > badList[element 1]:
hold = badList[element 1]
badList[element 1] = badList[element]
badList[element] = hold
print badList
else:
unsorted = True
print bubble(mylist)
Şimdi, bu (söyleyebileceğim kadarıyla) doğru sıralar ama bittikten sonra sadece sonsuza kadar döngü.
Nasıl bu kod düzgün ve doğru bir şekilde sıralar (makul) herhangi bir boyutta bir liste tamamlanır tamir edilebilir mi?
P. S. ben gerçekten bir işlevi parmak izi zorunda değilim ve bir dönüş gerekirdi biliyorum, ama ben sadece benim kod çalışmıyor gibi bunu henüz yapmış değil.
CEVAP
Senaryonu şimdi çalışmıyor neden açıklamak için, değişkeni Yeniden Adlandır ederim sorted
unsorted
.
İlk başta, listenizi henüz sıralanmış değil. Tabii ki, False
10 *çıktık.
while
döngü başlar başlamaz, liste zaten sıralanmış olduğunu varsayıyoruz. Fikir şu: doğru sırada değildir iki unsur bulur bulmaz, sorted
False
geri çıktık. sorted
True
kalıreğer yanlış sırayla elemanları olsaydı sadece.
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.
Ayrıca kodu daha verimli veya okunabilir yardımcı olacak küçük küçük sorunları var.
for
döngü, değişkenelement
kullanın. Teknik olarak,element
bir öğe değildir, Bir sayı listesi dizini temsil eden. Ayrıca, oldukça uzun. Bu gibi durumlarda, sadece geçici bir değişken adı,i
gibi kullanmak için "". dizinfor i in range(0, length):
range
komutu da tek bir bağımsız değişken (stop
adında). Bu durumda, bu bağımsız değişken 0 ile tüm tamsayılar bir listesini alabilirsiniz.for i in range(length):
Python Style Guide değişkenler alt çizgi ile küçük harflerle ismini önerir. Böyle bir senaryo için çok küçük bir kusur arama; daha fazla Python kodu genellikle benzer ne alışması için.
def bubble(bad_list):
İki değişken değerlerini değiş tokuş etmek için, başlığın bir ödev olarak bunları yazmak. Sağ tarafta bir demet olarak değerlendirilir (,
(badList[i 1], badList[i])
(3, 5)
) alır ve sonra da sol tarafta iki değişken ((badList[i], badList[i 1])
) atanır.bad_list[i], bad_list[i 1] = bad_list[i 1], bad_list[i]
Hepsini bir araya koy ve bunu al:
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
(Baskı ifadenizi çok zor çıkardım.)
Raylar bir model için varsayılan sıral...
Sıralama tarih dizeleri ya da nesneler...
C# Sıralama ve karşılaştırma OrderBy...
MySQL doğal Sıralama...
Nasıl ve Objective-C bir SIRALAMA tanı...