2014-10-22 3 views
0

병합 정렬을 개발합니다. 반복자 (iterator) 만 사용할 수 있습니다 (문제 진술). 내 함수의 출력은 생성자입니다.도움말을 사용하여 병합 정렬 반복자

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)