Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 合并排序未正确合并C++;_C++_Sorting_Merge - Fatal编程技术网

C++ 合并排序未正确合并C++;

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;

我已经为合并排序编写了一个程序,该程序运行良好,直到在合并点无法正确合并为止

下面是执行合并排序的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];
}
}
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];
}