由于上面提到的问题,我需要使用非库存排序函数,特别是我在之前的赋值中实现的mergesort函数。我使用activity_arr.sort(key=operator.itemgetter(2))
完成了我的作业。但是,要求是要求我使用此功能:
def merge_sort(array):
''' Sorts an array using merge sort algorithm.'''
if len(array) > 1:
# '//' is for "floor division", used in case array is filled with floats
mid = len(array) // 2
left = array[:mid]
right = array[mid:]
# Recursion to sort left and right half of array
merge_sort(left)
merge_sort(right)
i = 0
j = 0
k = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
array[k] = left[i]
i += 1
else:
array[k] = right[j]
j += 1
k += 1
# Fill the rest of the array with remaining numbers in each array
while i < len(left):
array[k] = left[i]
i += 1
k += 1
while j < len(right):
array[k] = right[j]
j += 1
k += 1
我假设,我将不得不修改它,以便我可以对元组列表进行排序。我要排序的列表的一个示例是example_list = [(1, 3, 4), (7, 2, 5), (1, 2, 1)]
。我想按元组的第三个元素按升序排序。因此,它应该导致以下结果:sorted_list = [(1, 2, 1), (1, 3, 4), (7, 2, 5)]
。
我仍然只是在学习python,并且在CS中仍然需要学习很多东西。我不知道如何进行这项改变,尽管有很多研究我大多数人都会说要使用.sort()。如果我遗漏了任何重要的信息,请告诉我!我将非常感谢任何帮助或信息让我查阅。谢谢!
答案 0 :(得分:0)
您可以传递一个索引,根据该索引对元组数组进行排序。
例如,如果要基于索引2对索引进行排序(索引从0开始),则可以将其用作:merge_sort(example_list,2)
。想法很简单,你必须根据给定的索引比较元素,就像我在这里做的那样:
if left[i][index] < right[j][index]:
def merge_sort(array,index): #edit here
''' Sorts an array using merge sort algorithm.'''
if len(array) > 1:
# '//' is for "floor division", used in case array is filled with floats
mid = len(array) // 2
left = array[:mid]
right = array[mid:]
# Recursion to sort left and right half of array
merge_sort(left,index) #edit here
merge_sort(right,index) #edit here
i = 0
j = 0
k = 0
while i < len(left) and j < len(right):
if left[i][index] < right[j][index]: #edit here
array[k] = left[i]
i += 1
else:
array[k] = right[j]
j += 1
k += 1
# Fill the rest of the array with remaining numbers in each array
while i < len(left):
array[k] = left[i]
i += 1
k += 1
while j < len(right):
array[k] = right[j]
j += 1
k += 1