2014-10-15 5 views
-1

Мне нужно написать 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() 

Я даже не знаю, с чего начать с этого. Любая помощь была бы замечательной

+0

Вы должны узнать о 'yield', он делает слияние абсолютно тривиальным. –

+0

попробуйте 'heapq.merge()'. При необходимости оберните элементы, используя специальную функцию 'key()'. См. [Сортировка текстового файла с помощью Python] (http://stackoverflow.com/q/14465154/4279) и [Улучшение сортировки слияния] (http://stackoverflow.com/q/15579226/4279). – jfs

+0

Вы можете рассмотреть возможность повторного редактирования существующего кода алгоритма сортировки слияния в этом случае. Http://interactivepython.org/runestone/static/pythonds/SortSearch/TheMergeSort.html – user3378649

ответ

0

На слайдах найдите сортировку слияния и просто скопируйте и вставьте ее, она должна иметь ее для слияния и merge_two_halves. После того, как вы вставили ниже def merge (?): И def merge_two_halves (?): , тогда единственное, что вам нужно изменить, - это один <, чтобы> в merge_two_halves, вы можете попробовать и выяснить, какой из них.