亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的合并排序程序不工作?

為什么我的合并排序程序不工作?

湖上湖 2023-06-20 17:33:03
為什么我的歸并排序程序不工作?def merge(a, p, q, r):    n1 = (q - p) + 1    n2 = r - q    L = [0] * n1    M = [0] * n2    for i in range(n1):        L[i] = a[i]    for j in range(n2):        M[j] = a[j]    i = 0    j = 0    for k in range(p, r):        if L[i] <= M[j]:            a[k] = L[i]            i += 1        else:            a[k] = M[j]            j += 1def merge_sort(a, p, r):    if len(a) <= 1:        print('list has only one element')    else:        q = len(a) // 2        merge_sort(a, p, q)        merge_sort(a, q + 1, r)        merge(a, p, q, r)        a = [3,41,52,26,38,57,9,49]merge_sort(a, 0, len(a) - 1)for _ in range(len(a)):    print('%d', a[_])
查看完整描述

1 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

您的代碼中存在多個問題:


切片的初始化循環不正確。索引a應該分別從p和開始q+1。將它們更改為:


  for i in range(n1):

      L[i] = a[p+i]


  for j in range(n2):

      M[j] = a[q+1+j]

或者簡單地寫:


  L = a[p..q+1]

  M = b[q+1..r+1]

這使得qandr應該被排除在外而不是被包含在內是顯而易見的。


合并循環不正確:范圍應該是range(p, r+1)并且一旦一個臨時數組用完,比較指的是超出orL[i] <= M[j]邊界的元素。LM


q計算不正確merge_sort:它應該是q = (p + r) // 2


測試if len(a) <= 1:不正確,您應該測試切片是否至少有 2 個元素,如果沒有則什么也不做:


  if p < r:

      q = (p + r) // 2

      merge_sort(a, p, q)

      merge_sort(a, q + 1, r)

      merge(a, p, q, r)

這是一個排除了上限的修改版本:


def merge(a, p, q, r):

    L = a[p..q]

    M = a[q..r]


    i = 0

    j = 0


    for k in range(p, r):

        if j >= len(M) or (i < len(L) and L[i] <= M[j]):

            a[k] = L[i]

            i += 1

        else:

            a[k] = M[j]

            j += 1


def merge_sort(a, p, r):

    if r - p > 1:

        q = p + (r - p) // 2

        merge_sort(a, p, q)

        merge_sort(a, q, r)

        merge(a, p, q, r)


        

a = [3,41,52,26,38,57,9,49]

merge_sort(a, 0, len(a))

for _ in range(len(a)):

    print('%d', a[_])


查看完整回答
反對 回復 2023-06-20
  • 1 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號