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]
while i < len(leftHalf) and j < len(rightHalf):
6
alist[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 :)
Şaşkınım. [3,4,5,9,9,12] 'doğru bir sonuç değil mi? – wvdz
Oraya '6' atlıyor. Bu gibi unsurlarla karışamam: D – vipulnj
Bu kodun çökmesi gerektiğinden eminim. 'Orta' – wvdz