Мне нужно написать merge_sort
и соответствующую функцию merge_two_halves
, которая сортирует список параметров кортежей. Список должен быть отсортирован в обратном порядке (самый большой - самый маленький). Каждый кортеж в списке кортежей, который передается как параметр функции merge_sort
, содержит два элемента, а функция merge_sort
должна использовать первый элемент (строку) каждого кортежа в качестве ключа сортировки.Python Merge Sort
, что:
def main():
print("1.")
a_list = [0, 0, 0, 0, 0]
list_of_tuples_left = [('Tim', 194493), ('Song', 201670), ('Abe', 203126)]
list_of_tuples_right = [('Jim', 194169), ('Ben', 179619)]
merge_two_halves(a_list, list_of_tuples_left, list_of_tuples_right)
print(a_list)
print()
print("2.")
a_list = [0, 0, 0, 0, 0, 0, 0, 0]
list_of_tuples_left = [('Joseph', 194493), ('Ethan', 201670), ('Christopher',
203126),('Andrew', 202301)]
list_of_tuples_right = [('William', 194169), ('David', 179619), ('Anthony',
191681), ('Alexander', 178646)]
merge_two_halves(a_list, list_of_tuples_left, list_of_tuples_right)
print(a_list)
print()
print("3.")
names_id_tuples = get_list_of_tuples_from_file("namesId.txt")
merge_sort(names_id_tuples)
for i in range(30):
print(names_id_tuples[i])
print()
Я даже не знаю, с чего начать с этого. Любая помощь была бы замечательной
Вы должны узнать о 'yield', он делает слияние абсолютно тривиальным. –
попробуйте 'heapq.merge()'. При необходимости оберните элементы, используя специальную функцию 'key()'. См. [Сортировка текстового файла с помощью Python] (http://stackoverflow.com/q/14465154/4279) и [Улучшение сортировки слияния] (http://stackoverflow.com/q/15579226/4279). – jfs
Вы можете рассмотреть возможность повторного редактирования существующего кода алгоритма сортировки слияния в этом случае. Http://interactivepython.org/runestone/static/pythonds/SortSearch/TheMergeSort.html – user3378649