2014-10-31 4 views
-1

나는 그의 과정에서 Sedgewick이 가르치는 알고리즘을 사용하여 Python에서 Mergesort 구현을 작성했습니다. 제대로 분류 할 수 없습니다. 코드에 어떤 문제가 있습니까?Mergesort 코드를 쓸 수 없습니다

def merge(a, aux, lo, mid, hi): 
    assert isSorted(a, lo, mid) 
    assert isSorted(a, mid+1, hi) 

    for k in range(lo, hi): 
     aux[k] = a[k] 

    i = lo 
    j = mid + 1 
    for k in range(lo, hi): 
     if i > mid: 
      a[k] = aux[j] 
      j += 1 
     elif j > hi: 
      a[k] = aux[i] 
      i += 1 
     elif a[i] < a[j]: 
      a[k] = aux[i] 
      i += 1 
     else: 
      a[k] = aux[j] 
      j += 1 
    assert isSorted(a, lo, hi) 

def sort(a, aux, lo, hi): 
    if (lo >= hi): return a 
    mid = math.floor(lo + (hi-lo)/2) 

    sort(a, aux, lo, mid) 
    sort(a, aux, mid+1, hi) 
    merge(a, aux, lo, mid, hi) 

def merge_sort(a): 
    aux = [0] * len(a) 
    sort(a, aux, 0, len(a)) 
    assert isSortedArray(a) 
+0

어쩌면 당신은 디버깅하려고 할 것입니까? – Herokiller

답변

0

파이썬은 0 기반 색인화를 사용합니다. lo, mid, hi를 0 기반 색인화로 조정해야합니다.

출발점

sort(a,aux,0, len(a)-1)