【发布时间】:2023-03-28 03:55:02
【问题描述】:
我已经编写了一个合并排序程序,该程序工作正常,直到合并时它没有正确合并
这是执行合并排序的 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;
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];
}
}
所以程序进入数组时可以很好地拆分它,但是当它返回时,递归会错过一些合并,并且数组的一半没有在正确的位置合并。 我该如何解决?
【问题讨论】: