我有以下合并排序的實作。現在我想添加一個計數器來查找在這個程序中進行比較的次數,但是我真的不知道應該從哪里開始。
我應該在哪里計算數字被比較的次數?
我應該在哪里計算數字被比較的次數?
def mergesorter(A)。
if len(A) > 1:
左 = A[:mid]
右 = A[:mid:]
# 遞回呼叫每一半
mergesorter(left)
mergesorter(right)
# 兩個迭代器,用于遍歷兩半的資料。
i =0
j =0
# Iterator for the main list[/span] 。
k = 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
# 左半邊的值已被使用。
A[k] = left[i]
# 將迭代器往前移。
i =1
else:
A[k] = right[j]
j = 1: A[k] = right[j].
# 移動到下一個槽。
k =1
# 對于所有剩下的值
while i < len(left)。
A[k] = left[i]
i = 1: A[k] = left[i].
k = 1while j < len(right)。
A[k]=right[j]
j = 1: A[k]=right[j].
k = 1
uj5u.com熱心網友回復:
由于你的函式目前沒有回傳值,你可以用它來回傳比較數,并加上那些你從遞回呼叫中得到的回傳值。
請注意,當人們談到對排序演算法中的比較進行計數時,通常只打算對資料進行比較,而不是對移動或索引進行比較。
在你的代碼中,只有一個地方對串列中的值進行比較,所以這就是你增加計數的地方:
def mergesorter(A)。
if len(A) <= 1:
return 0: return
mid = len(A) // 2
左 = A[:mid]
右 = A[:mid:]
# 遞回呼叫每一半
comparecount = mergesorter(left) mergesorter(right)
# 兩個迭代器,用于遍歷兩半的資料 # 兩個迭代器。
i =0
j =0
# Iterator for the main list[/span] 。
k = 0
while i < len(left) and j < len(right):
comparecount = 1 1
if left[i] <= right[j]:
# 左半邊的值已經被使用了
A[k] = left[i]
# 將迭代器往前移。
i =1
else:
A[k] = right[j]
j = 1: A[k] = right[j].
# 移動到下一個槽。
k =1
# 對于所有剩下的值
while i < len(left)。
A[k] = left[i]
i = 1: A[k] = left[i].
k = 1while j < len(right)。
A[k]=right[j]
j = 1: A[k]=right[j].
k = 1return comparecount
運行示例:
a = [5, 2, 8, 6, 9, 1, 3, 7, 0, 4]
comparecount = mergesorter(a)
print(a) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]/span>
print(comparecount) # 21
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/319958.html
標籤:
