2013-04-24 2 views
0

문제가 있습니다. 병합 정렬이 어떻게 작동하는지 배우기 시작했고, 이제 막 달라 붙었습니다. 병합 함수에서 두 번째 재귀를 이해할 수 없습니다. 원래 배열 : 첫 번째 재귀가 완료병합 재귀 호출

int merge_sort(int input[], int p, int r) 
{ 
     if (p >= r) return 0; 

     int mid = floor((p + r)/2); 
     merge_sort(input, p, mid); 
     **merge_sort(input, mid + 1, r);** 
     merge(input, p, r); 
} 

때, 나는 이런 식으로 뭔가 끝낼 3 4 5 6 7 8

3 4 5 | 6 7 8

3 4 | 5

3 | 4

3

그리고 제 재귀 시작. 그럼, 내 질문은 : 하나의 요소 (이 경우에는 하나의 숫자, 3) 또는 원래 배열 (처음부터 6 요소 배열)에서 배열로 두 번째 재귀를 시작합니까? 내가 무슨 뜻인지 이해할 수 있기를 바랍니다. 감사.

답변

0

항상 입력 배열을 전달하기 때문에 코드에서 알 수 없습니다. 3 4 5 6 7 8

제 재귀 : 3 4 5

초 재귀 6 7 8

그러나 예 아이디어는 상기 제 1 호가

merge_sort에 있어야 분할 정복한다

이 위키 피 디아의 사진을 살펴 보자 그 그림에 따라, responde에 대한 http://en.wikipedia.org/wiki/File:Merge_sort_algorithm_diagram.svg

+0

감사합니다, 그래서 그것은 왼쪽 분할 재귀 번 호출 한 다음 오른쪽 분할 재귀 번 등이라는 것을 의미한다 ... 내가 그걸 가지고 있다면 흔적. – mangu

+0

예 정확히 그렇습니다. –