簡體   English   中英

合並排序執行邏輯錯誤

[英]logical error in the execution of merge sort

我的合並排序代碼將 0 作為排序數組的成員,這種輸出的原因是什么?

PS C:\Users\admin\Desktop\python> python m.py
4 0 6 1 5 2 3
the  soerted array is [0, 0, 0, 0, 0, 0, 0]
PS C:\Users\admin\Desktop\python>

代碼如下

    g = []
    n = q-p+1
    m = r-q
    b = [0]*(n)
    c = [0]*(m)
    for i in range(0, n):
        b.append(a[i+p])
    for j in range(0, m):
        c.append(a[q+1+j])
    b.append(math.inf)
    c.append(math.inf)
    i = 0
    j = 0

    for k in range(p, r+1):
        if b[i] < c[j]:
            g.append(b[i])
            i += 1
        else:
            g.append(c[j])
            j += 1

    return g


def mergesort(a, p, r):
    if p < r:
        q = (p+r)//2
        mergesort(a, p, q)
        mergesort(a, q+1, r)
        return merge(a, p, q, r)


a = [4, 0, 6, 1, 5, 2, 3]
n = len(a)
print(*a, sep=" ")
print("the  sorted array is", mergesort(a, 0, n-1))

有沒有其他更好的方法來為這個程序編寫驅動程序代碼

這段代碼包含相當多的錯誤。 例如,
歸並排序(a,p,q)
歸並排序(a,q+1,r)
從不使用這兩行的返回值。

b = [0]*(n)
c = [0]*(m)

在這里,您用 0 填充兩個列表,然后在列表的末尾附加新值,而這些 0 只會確保您的返回值只是 0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM