def mergeSort(arr):
if len(arr) > 1:
mid = len(arr)//2
L = arr[:mid]
R = arr[mid:]
mergeSort(L)
mergeSort(R)
i = j = k = 0
while i < len(L) and j < len(R):
if L[i][1] <= R[j][1]:
arr[k] = L[i][1]
i += 1
else:
arr[k] = R[j][1]
j += 1
k += 1
while i < len(L):
arr[k] = L[i][1]
i += 1
k += 1
while j < len(R):
arr[k] = R[j][1]
j += 1
k += 1
print(arr)
将其应用于元组列表:
tuplelist = [(1, 600), (2, 800), (3, 200)]
给了我类型错误:
TypeError:“int”对象不可下标。
合并排序确实可以在正常的整数列表上运行。我尝试将其更改为目标我想要合并排序的值:根据每个元组的索引 1 按升序对元组进行排序,因此我添加的原因是:
if L[i][1] <= R[j][1]
,例如。
如何更改排序算法,使其适用于元组列表?
这两行仅用元组的第二个元素替换元组,因此以后尝试比较元组的第二个元素将会失败。
arr[k] = L[i][1]
和
arr[k] = R[j][1]
分配时不要使用
[1]
索引。将它们更改为:
arr[k] = L[i]
和
arr[k] = R[j]