C++ 合并排序未正确合并C++;
我已经为合并排序编写了一个程序,该程序运行良好,直到在合并点无法正确合并为止 下面是执行合并排序的3个函数。我找不到问题C++ 合并排序未正确合并C++;,c++,sorting,merge,C++,Sorting,Merge,我已经为合并排序编写了一个程序,该程序运行良好,直到在合并点无法正确合并为止 下面是执行合并排序的3个函数。我找不到问题 void mergeSort(int A[], int tmp[], int n) { mergeSort(A, tmp, 0, n); merge(A,tmp,0,n);} void mergeSort(int A[],int tmp[], int left, int right){ if (right-left<2) return; int mid;
void mergeSort(int A[], int tmp[], int n)
{
mergeSort(A, tmp, 0, n);
merge(A,tmp,0,n);}
void mergeSort(int A[],int tmp[], int left, int right){
if (right-left<2)
return;
int mid;
if (left < right)
{
mid= ((left+right)/2);
mergeSort(A, tmp, mid+1, right);
merge (A, tmp, mid+1, right-1);
mergeSort(A, tmp, left ,mid);
merge (A, tmp, left, mid);
}
return;
}
void merge(int A[], int tmp[], int left, int right)
{
int k=left;
int start=left;
int mid= ((right+left)/2)+1;
int leftEnd= mid-1;
int numElemet= (right-left);
while ((left<=leftEnd) &&(mid<=right))
{
if (A[left]<= A[mid])
{
tmp[k] = A[left];
k++;
left++;
}
else
{
tmp[k] = A[mid];
k++;
mid++;
}
}
while (left<= leftEnd)
{
tmp[k]= A[left];
left++;
k++;
}
while(mid<= right)
{
tmp[k]= A[mid];
mid++;
k++;
}
for (int i=start;i<k; i++)
{
A[i]= tmp[i];
}
}
void合并排序(int A[],int tmp[],int n)
{
合并排序(A,tmp,0,n);
合并(A,tmp,0,n);}
无效合并排序(int A[],int tmp[],int左,int右){
如果(right-left,则在操作数组时应加倍小心边界
一,。
您的代码:
mergeSort(A, tmp, mid+1, right);
merge (A, tmp, mid+1, right-1);
合并排序是一种分而治之的方法。被分而治之的数字范围应该是相同的。您认为上面代码的哪一部分有错误
2.int numElemet=(右-左);
不使用,应该删除,而且元素的#应该是right-left+1
三,
for(int i=start;i
for (int i=start;i<k; i++)
{
A[i]= tmp[i];
}