def merge (seq, p, q, r):
# n1: length of sub-array [p..q]
n1 = q - p + 1
# n2: length of sub-array [q+1 ..r]
n2 = r - q
# Left and Right arrays
left_arr = []
right_arr = []
for i in xrange(0, n1):
left_arr.append(seq[p+i])
for j in xrange(0, n2):
right_arr.append(seq[q+j+1])
j=0
i=0
for k in xrange(p,r+1):
if left_arr[i]<= right_arr[j]:
seq[k]=left_arr[i]
i+=1
else:
seq[k]=right_arr[j]
j+=1
return seq
s = [2,4,5,7,1,2,3,6]
p = 0
q = 3
r = 7
print merge(s,p,q,r)
의이 순서가 병합하는 인덱스 번호와 함께 촬영 된 분류되지 않은 순서. (p = 초기, R = 최종 Q = 중간)
- 지금
, left_arr 및 right_arr 우리 left_arr 및 right_arr 초기 값을 각각 [P, Q], [Q + 1, R]
있다 (i = 0, j = 0). 우리는
위의 기능은 마지막 번호까지 정렬 할 수 있습니다 ... 우리가 정렬 된 값으로 서열의 값을 교체하는 반복하면서
"7"... 시퀀스 서열 반복 .. 결국 "IndexError"를 보여줍니다. 나는 그것을 잡아서 고치기 위해 예외 처리를 사용할 수 있지만, 나는 생각한다 ... 병합 정렬을 위해, 그것의 너무 많다. 누구든지 코드를 가능한 쉽게 수정하는 것을 도와 줄 수있다. 내가 알고리즘을 배우고는 ... (책을 다음과 토마스 H 코만하여 알고리즘 소개)
숙제 태그는 사람들이 측정 할 수 있도록 텍스트의 숙제가 있다고 언급 여전히 도움이되지만 (더 이상 사용할 필요가 없습니다 있도록 사용되지 않습니다 무엇을 대답은 가장 유용 할 것입니다.) – DSM
@ xvtk seq의 최대 색인은 "7"입니다. –