我編輯了我的代碼,刪除了明顯的錯誤。但我仍然無法找到爲什麼我的mergesplit函數不是遞歸的。它只執行一次。請如果有人能給我一個詳細的解決方案。MergeSort中的遞歸
#include<bits/stdc++.h>
void Merge_Sort(int a[],int p,int q,int mid);
void Merge_Split(int a[],int p,int q)//recursive function
{
int mid;
if (p<q)
{
mid=(p+q)/2;
Merge_Split(a,p,mid);
Merge_Split(a,mid+1,q);
Merge_Sort(a,p,q,mid);
}
return;
}
void Merge_Sort(int a[], int p,int q,int mid)//sorting function
{
int b[50];
int i,j,x;
for(i=p,j=mid+1,x=p;i<=mid,j<q;)
{
if(a[j]<=a[i])
b[x++]=a[j++];
else
b[x++]=a[i++];
}
while(i<=mid)
{
b[x++]=a[i++];
}
while(j<=q)
{
b[x++]=a[j++];
}
for(int i=p;i<q;i++)
a[i]=b[i];
}
int main()
{
int a[5],x=0,n=5;
for(int i=0;i<n;i++)
scanf("%d", &a[i]);
Merge_Split(a,0,5);
for(int i=0;i<5;i++)
printf("%d", a[i]);
return 0;
}
此代碼應該正常工作。我無法找出我的問題。請幫助。
'b [x ++] == a [j ++]',這個不分配,'=='是比較運算符而不是賦值運算符。除此之外,用C++ 11標記這個看起來很容易讓人誤解。 – Jack
你的代碼永遠不會調用Merge_Split,只調用一次Merge_Sort(無遞歸)。 –
傑克感謝指出這個錯誤,而且n.m可以解釋多一點?我的意思是我只是交換合併排序功能與拆分之一。我仍然得到相同的結果 –