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++实现了用向量代替数组的合并算法。我从最初的算法一步一步地工作,但是当我编译时,我没有得到任何输出或错误消息。我认为我的“合并”功能有问题,但我找不到它。我不熟悉排序算法,所以如果我的代码中有任何基本的误解或错误,请向我解释 #include <iostream> #include <vector> using namespace std; void mergeSort(vector<int>& numvec, int left, int right){ if(left < right){ int middle = left + (right - left) / 2; mergeSort(numvec, left, middle); mergeSort(numvec, middle + 1, right); merge(numvec, left, middle, right); } } int merge(vector<int>& numvec , int left, int mid, int right){ int i, j, k, temp[right-left+1]; i = left; j = right; k = mid + 1; while(i <= mid && j <= right){ if(numvec[i] < numvec[j]) { temp[k] = numvec[i]; k++; i++; } else { temp[k] = numvec[j]; k++; j++; } while(i <= mid){ temp[k] = numvec[i]; k++; i++; } while( j <= right){ temp[k] = numvec[j]; } for(i = left; i <= right; i++){ numvec[i] = temp[i - left]; } } } #包括 #包括 使用名称空间std; 无效合并排序(向量和numvec,左整数,右整数){ if(左_C++_Sorting_Vector_Mergesort - Fatal编程技术网

C++;用向量实现合并排序 我用C++实现了用向量代替数组的合并算法。我从最初的算法一步一步地工作,但是当我编译时,我没有得到任何输出或错误消息。我认为我的“合并”功能有问题,但我找不到它。我不熟悉排序算法,所以如果我的代码中有任何基本的误解或错误,请向我解释 #include <iostream> #include <vector> using namespace std; void mergeSort(vector<int>& numvec, int left, int right){ if(left < right){ int middle = left + (right - left) / 2; mergeSort(numvec, left, middle); mergeSort(numvec, middle + 1, right); merge(numvec, left, middle, right); } } int merge(vector<int>& numvec , int left, int mid, int right){ int i, j, k, temp[right-left+1]; i = left; j = right; k = mid + 1; while(i <= mid && j <= right){ if(numvec[i] < numvec[j]) { temp[k] = numvec[i]; k++; i++; } else { temp[k] = numvec[j]; k++; j++; } while(i <= mid){ temp[k] = numvec[i]; k++; i++; } while( j <= right){ temp[k] = numvec[j]; } for(i = left; i <= right; i++){ numvec[i] = temp[i - left]; } } } #包括 #包括 使用名称空间std; 无效合并排序(向量和numvec,左整数,右整数){ if(左

C++;用向量实现合并排序 我用C++实现了用向量代替数组的合并算法。我从最初的算法一步一步地工作,但是当我编译时,我没有得到任何输出或错误消息。我认为我的“合并”功能有问题,但我找不到它。我不熟悉排序算法,所以如果我的代码中有任何基本的误解或错误,请向我解释 #include <iostream> #include <vector> using namespace std; void mergeSort(vector<int>& numvec, int left, int right){ if(left < right){ int middle = left + (right - left) / 2; mergeSort(numvec, left, middle); mergeSort(numvec, middle + 1, right); merge(numvec, left, middle, right); } } int merge(vector<int>& numvec , int left, int mid, int right){ int i, j, k, temp[right-left+1]; i = left; j = right; k = mid + 1; while(i <= mid && j <= right){ if(numvec[i] < numvec[j]) { temp[k] = numvec[i]; k++; i++; } else { temp[k] = numvec[j]; k++; j++; } while(i <= mid){ temp[k] = numvec[i]; k++; i++; } while( j <= right){ temp[k] = numvec[j]; } for(i = left; i <= right; i++){ numvec[i] = temp[i - left]; } } } #包括 #包括 使用名称空间std; 无效合并排序(向量和numvec,左整数,右整数){ if(左,c++,sorting,vector,mergesort,C++,Sorting,Vector,Mergesort,到目前为止,我在代码中发现的错误如下所示: int合并(vector&numvec,int左,int中,int右) 合并左向量和右向量时,必须返回合并后的向量 向量而不是int k=mid+1 k将从l开始,而不是从mid+1开始,因为在任何级别,我们都将从左向量的第一个索引开始填充元素,而不是从右向量的第一个元素开始填充元素,即mid+1 此外,还需要声明两个向量,以便在一个向量中从左到中存储元素,在另一个向量中从中到右存储元素 现在,如果您必须严格使用vector实现合并排序,那么您可

到目前为止,我在代码中发现的错误如下所示:

  • int合并(vector&numvec,int左,int中,int右)

    合并左向量和右向量时,必须返回合并后的向量 向量而不是int

  • k=mid+1

    k
    将从
    l
    开始,而不是从
    mid+1
    开始,因为在任何级别,我们都将从左向量的第一个索引开始填充元素,而不是从右向量的第一个元素开始填充元素,即
    mid+1

  • 此外,还需要声明两个向量,以便在一个向量中从左到中存储元素,在另一个向量中从中到右存储元素

  • 现在,如果您必须严格使用vector实现合并排序,那么您可以看到我的代码。

    向量合并(向量l,向量r)
    {
    向量res;
    int i=0;
    int j=0;
    而(i!=l.size()&&j!=r.size())
    {
    
    如果(l[i]我至今能在代码中找到的错误如下:

  • int合并(vector&numvec,int左,int中,int右)

    合并左向量和右向量时,必须返回合并后的向量 向量而不是int

  • k=mid+1

    k
    将从
    l
    开始,而不是从
    mid+1
    开始,因为在任何级别,我们都将从左向量的第一个索引开始填充元素,而不是从右向量的第一个元素开始填充元素,即
    mid+1

  • 此外,还需要声明两个向量,以便在一个向量中从左到中存储元素,在另一个向量中从中到右存储元素

  • 现在,如果您必须严格使用vector实现合并排序,那么您可以看到我的代码。

    向量合并(向量l,向量r)
    {
    向量res;
    int i=0;
    int j=0;
    而(i!=l.size()&&j!=r.size())
    {
    
    如果(l[i]第一个问题出现在下面的代码中:

    int merge(vector<int>& numvec , int left, int mid, int right)
    
    int合并(向量和numvec,int左,int中,int右)
    
    您说过将返回一个整数,但从未返回任何内容。 同样对于mergeSort,您应该声明两个临时数组,一个用于右侧,另一个用于左侧,以便可以合并它们,但您从未这样做。最后,下面的代码毫无意义:

    for(i = left; i <= right; i++){
            numvec[i] = temp[i - left];
        }
    

    for(i=left;i第一个问题在下面的代码中:

    int merge(vector<int>& numvec , int left, int mid, int right)
    
    int合并(向量和numvec,int左,int中,int右)
    
    您说过将返回一个整数,但从未返回任何内容。 同样对于mergeSort,您应该声明两个临时数组,一个用于右侧,另一个用于左侧,以便可以合并它们,但您从未这样做。最后,下面的代码毫无意义:

    for(i = left; i <= right; i++){
            numvec[i] = temp[i - left];
        }
    

    对于(i=left;我请提供一个,还请注意,可变大小的堆栈分配数组是非标准的gcc扩展,您应该使用
    向量
    而不是
    temp[right-left+1]
    --您已经在使用
    vector
    。您也应该在这里使用它。您应该理解
    std::vector
    存在的原因,并且它就是为了这个目的(动态数组)。我没有详细介绍,但您肯定需要从0开始计算
    k
    ,而不是从
    mid+1
    另请参见:请提供一个,还请注意,可变大小堆栈分配数组是非标准gcc扩展,您应该使用
    向量
    而不是
    temp[right-left+1]
    --您已经在使用
    vector
    。您也应该在这里使用它。您应该理解
    std::vector
    存在的原因,并且它就是为了这个目的(动态数组)。我没有详细介绍,但您肯定需要从0开始计算
    k
    ,而不是从
    mid+1
    另请参见: