こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

#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)を使って表してほしいです。

投稿日時 - 2009-11-06 23:29:41

QNo.5427550

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

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

投稿日時 - 2009-11-07 00:29:15

あなたにオススメの質問