2016-03-23 19 views
0

Burada python birleştirme sıralama algoritması uygulamak için çalışıyorum. Kodu (akışları izlemek için baskılarla) ve çıktısını veriyorum. Gördüğünüz gibi, her şey nihai birleştirme işlemine kadar doğru şekilde çalışır.Kod basit bir while döngüsünde beklendiği gibi davranmıyor neden açılamıyor

def mergesort(alist): 
if(len(alist) == 1): 
    return alist 
else: 
    mid = len(alist)/2 
    leftHalf = mergesort(alist[:mid]) 
    rightHalf = mergesort(alist[mid:]) 

    i, j, k = 0, 0, 0 #i= leftHalf counter, j= rightHalf counter, k= alist counter 

    while i < len(leftHalf) and j < len(rightHalf): 
     if(leftHalf[i] < rightHalf[j]): 
      alist[k] = leftHalf[j] 
      i += 1; k += 1 
     else: 
      alist[k] = rightHalf[j] 
      j += 1; k += 1 
     print "i=", i, "j=", j, "k=",k 
    print "quit the loop" 

    if(i<j): #it means j has proceeded ahead in its righthalf 
     remaining = leftHalf 
     r = i 
    else: 
     remaining = rightHalf 
     r = j 

    print remaining 
    print "k =",k 
    while (r < len(remaining)): 
     alist[k] = remaining[r] 
     r += 1; k += 1 

    print "i =", i , ";j = ", j,";k = ", k 
    print "alist sorted =", alist 
    print "*********" 
    return alist 

alist = [3,9,6,12,4,5] 
mergesort(alist) 
print alist 

takiben, doğru girdi alist = [3,9,6,12,4,5]

Tracing

while i < len(leftHalf) and j < len(rightHalf):6alist[3] için leftHalf[1] kopyalanması izin vermelidir diyor while koşul için iz nedir? Ben bunu görmüyorum. Bu başarısız neden birinin açıklayabilir Eğer

, benim sefalet beni koyacağım :)

+0

Şaşkınım. [3,4,5,9,9,12] 'doğru bir sonuç değil mi? – wvdz

+0

Oraya '6' atlıyor. Bu gibi unsurlarla karışamam: D – vipulnj

+0

Bu kodun çökmesi gerektiğinden eminim. 'Orta' – wvdz

cevap

2

Sen hata sen alist[k] = leftHalf[j] yılında leftHalf[j] ancak leftHalf[i] gerekmez burada

if(leftHalf[i] < rightHalf[j]): 
    alist[k] = leftHalf[j] 
    i += 1; k += 1 
else: 
    alist[k] = rightHalf[j] 
    j += 1; k += 1 

olduğunu.

İlgili konular