• 締切済み

マージソート内の再帰処理にすいて

#include<stdio.h> #define MAX 4 int temp[MAX]; void marge(int num[],int left,int right) { int i,j,mid,k   if(left>=right)return; mid=(left+right)/2; marge(num,left,mid);//(1) maege(num,mid+1,right);//(2) for(i=left;i<=mid;i++) temp[i]=num[i]; for(i=mid+1,j=right;i<=right;i++,j--) temp[i]=num]j]; i=left; j=right; for(k=left;k<=right;k++) if(temp[i]<=temp[j]) num[k]=temp[i++]; else num[k]=temp[j--] } マージソート内はこういった関数を記述してエラーもでないのですが、(1)と(2)の処理がよくわかりません。 (1)は再帰的に処理していってif(left>=right)return;の条件を満たした場合に(2)の処理に入っていきますよね? その場合、(2)の処理を行う際に(1)が(2)の再帰より前に記述されているので(1)がまた処理されるのでしょうか? 一連の流れを(1)、(2)を使って表してほしいです。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

どうでもいいけど「marge」じゃなくて「merge」. で実行については「(1) を処理→(2) を処理→残りを処理」が基本で, このうち「(1) を処理」とか「(2) を処理」のところで再帰的に行うだけです. 呼び出し関係を図で描いてみた方がいいかも.