質問は次のとおりです。1)比較をカウントする正しいコードですか? 2)どのように私は([1,2,3,4]、number_of_comparisons)コードのようにソートされたリストとカウンター返すことができます。マージソートカウントの比較
counter = 0
def merge_sort(lst):
"""Sorts the input list using the merge sort algorithm.
>>> lst = [4, 5, 1, 6, 3]
>>> merge_sort(lst)
[1, 3, 4, 5, 6]
"""
if len(lst) <= 1:
return lst
mid = len(lst) // 2
left = merge_sort(lst[:mid])
right = merge_sort(lst[mid:])
return merge(left, right), counter
def merge(left, right):
"""Takes two sorted lists and returns a single sorted list by comparing the elements one at a time.
>>> left = [1, 5, 6]
>>> right = [2, 3, 4]
>>> merge(left, right)
[1, 2, 3, 4, 5, 6]
"""
global counter
if not left:
return right
if not right:
return left
counter += 1
if left[0] < right[0]:
return [left[0]] + merge(left[1:], right)
return [right[0]] + merge(left, right[1:])
lst = [4, 5, 1, 6, 3]
print(merge_sort(lst))
出力:
([1,3,4,5,6], counter)
あなたが比較をカウントしている場合は、すべきでありませんすべての条件の後に 'counter + = 1'がありますか? –