私が見ているmergesortの実装のほとんどはこれに似ています。アルゴリズムの紹介、私が検索するオンラインのインパクトと一緒に。私の再帰チョップは、フィボナッチ世代(それは十分に単純だった)を乱すよりもそれほど進んでいないので、多分、私の心を吹き飛ばしている複数の再帰ですが、コードを踏んでも、私がヒットする前に何が起こっているのか理解できませんマージ関数。mergesortの再帰を理解する
どのようにこれを実行していますか?ここでのプロセスをより深く理解するためには、何か戦略や読書がありますか?
void mergesort(int *a, int*b, int low, int high)
{
int pivot;
if(low<high)
{
pivot=(low+high)/2;
mergesort(a,b,low,pivot);
mergesort(a,b,pivot+1,high);
merge(a,b,low,pivot,high);
}
}
とマージ(私もこの部分に到達する前に、率直に言って、私は精神的にこだわっているが)
void merge(int *a, int *b, int low, int pivot, int high)
{
int h,i,j,k;
h=low;
i=low;
j=pivot+1;
while((h<=pivot)&&(j<=high))
{
if(a[h]<=a[j])
{
b[i]=a[h];
h++;
}
else
{
b[i]=a[j];
j++;
}
i++;
}
if(h>pivot)
{
for(k=j; k<=high; k++)
{
b[i]=a[k];
i++;
}
}
else
{
for(k=h; k<=pivot; k++)
{
b[i]=a[k];
i++;
}
}
for(k=low; k<=high; k++) a[k]=b[k];
}
答えに説明を追加してください。@Shravan Kumar –
コードを答えとしてダンプするのを避けてください。関連するコーディング経験を持っていない人にとっては、あなたのコードは明らかではないかもしれません。 [解明、文脈を含めるようにあなたの答えを編集して、あなたの答えに何らかの制限、前提条件、簡素化について言及してください。](https://stackoverflow.com/help/how-to-answer) –