SORU
21 Mayıs 2009, PERŞEMBE


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
23 Mayıs 2009, CUMARTESİ


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şken element 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 "". dizin

    for 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.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ColdfusTion

    ColdfusTion

    3 Aralık 2007
  • kruno j

    kruno j

    6 Mayıs 2007
  • The Verge

    The Verge

    8 AĞUSTOS 2006