これは反転をカウントするために調整されるマージソートです。私のコードは奇妙なエラーを投げます (私はpython 3.xを学ぶためにalgosを実装しています)。予想される値の数を明示的に返すにもかかわらず、なぜ 'valueError'が返されますか?
In line 11,
in merge_sort first_sorted_half, x = merge_sort(arr[:half])
[Previous line repeated 12 more times] ValueError: not enough values to unpack (expected 2, got 1)
明示的に2つの値を返しますが、私はPython 3の新機能ですので、ここで何が起こっているのか正確に理解したいのですが、どこでも同じような問題を見つけることはできません。これに関する詳細については、Pythonのドキュメントへのリンクもありがとう!
はdef merge_sort(arr):
if len(arr) <= 1:
return arr
half = int(len(arr)/2)
first_sorted_half, x = merge_sort(arr[:half])
second_sorted_half, y = merge_sort(arr[half:])
merged_halves, z = merge(first_sorted_half, second_sorted_half)
return merged_halves, x + y + z
def merge(first_half, second_half):
n = len(first_half) + len(second_half)
i = 0
j = 0
split_inversions = 0
ans = []
for k in range(n):
if i >= len(first_half):
ans.append(second_half[j])
j += 1
continue
if j >= len(second_half):
ans.append(first_half[i])
i += 1
continue
if first_half[i] > second_half[j]:
ans.append(second_half[j])
j += 1
split_inversions += len(first_half) - i
elif first_half[i] < second_half[j]:
ans.append(first_half[i])
i += 1
return ans, split_inversions
numbers = [3,2,1,4,5,6,8,10,9]
print(merge_sort(numbers))
感謝!!これは多くの助けになりました! –