Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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++_Sorting_Merge_Mergesort - Fatal编程技术网

C++ 合并排序-程序不检查最后两个位置。

C++ 合并排序-程序不检查最后两个位置。,c++,sorting,merge,mergesort,C++,Sorting,Merge,Mergesort,我的程序有问题。它适用于较小数量的参数,但例如对于输入13 5 10 8 6 22 11 3 12 20 7 9 14 17 19 1 2 18它返回1,3,5,6,7,8,9,10,11,12,13,14,17,19,20,22,2,18,。我真的不知道到底出了什么问题 功能 void mergeSort(int-arr[],int-arrSort[],int-first,int-mid,int-last){ int from=第一个; int到=中间; 对于(int i=first;i可以简

我的程序有问题。它适用于较小数量的参数,但例如对于输入
13 5 10 8 6 22 11 3 12 20 7 9 14 17 19 1 2 18
它返回
1,3,5,6,7,8,9,10,11,12,13,14,17,19,20,22,2,18,
。我真的不知道到底出了什么问题

功能

void mergeSort(int-arr[],int-arrSort[],int-first,int-mid,int-last){
int from=第一个;
int到=中间;

对于(int i=first;i可以简化mergesortIter()的内部循环(这也可能修复一个潜在问题,我没有检查所有可能的问题):

for(int j=0;j
对于mergesort函数,它实际上是一个合并函数,这对if语句在检查索引是否超出范围之前比较数据。当到达运行结束时,它也不会复制剩余的数据。下面是一个替代方法:

        if (from < mid && (to >= last || A[from] <= A[to])) {
            B[i] = A[from];
            from = from + 1;
        } else {
            B[i] = A[to];
            to = to + 1;    
        }

if(from=last|A[from]将所有相关代码放在这里。如果代码太多,只要它是最小的复制量就可以了。您在数组外建立索引,导致未定义的行为。作为练习,找出剩下的位置。(在
mergeSort
中插入一些跟踪输出)当你开始工作的时候,最好进行代码审查。
    for (int j = 0; j < size; j += (2 * i))
        mergeSort(array, a, j, min(j+i, size), min(j+2*i, size));
        if (from < mid && (to >= last || A[from] <= A[to])) {
            B[i] = A[from];
            from = from + 1;
        } else {
            B[i] = A[to];
            to = to + 1;    
        }