2014-10-22 3 views
0

Я разрабатываю сортировку слияния, которая может использовать только итератор (это утверждение проблемы). Выход моей функции - это генератор.Объединить сортировку с помощью Итераторы

Я пишу объединить функции сортировки:

def merge_sort(data): 
    data1, data2 = itertools.tee(data) 

    counter = 0 
    for i in data1: 
     counter += 1 

    if counter < 2: 
     return data2 

    middle = int(counter/2) 

    y = itertools.islice(data2, 0, middle) 
    z = itertools.islice(data2, middle, counter) 

    sorted_y = merge_sort(y) 
    sorted_z = merge_sort(z) 

    return heapq.merge(sorted_y, sorted_z) 

Я проверить свою функцию:

def main(): 
    unsorted_list = [10, 3, 5, 0, 1, -5, 6, 2] 

    result = merge_sort(iter(unsorted_list)) 

    for i in result: 
     print(i) 

Но это не работает. Я получаю только номер 10. Где я совершил ошибку?

ответ

1

Это право функция:

def merge_sort(data): 
    data1, data2, data3 = itertools.tee(data, 3) 

    counter = 0 
    for i in data1: 
     counter += 1 

    if counter < 2: 
     return data3 

    middle = int(counter/2) 

    y = itertools.islice(data2, 0, middle) 
    z = itertools.islice(data3, middle, counter) 

    sorted_y = merge_sort(y) 
    sorted_z = merge_sort(z) 

    return merge(sorted_y, sorted_z)