Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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++中的一个合并排序算法,它以一个泛型类型的向量作为输入,并对向量中的元素进行排序。 除了每次尝试测试算法时都会出现[run]总线错误(内核转储)错误_C++_Sorting_Mergesort - Fatal编程技术网

合并排序错误 我试图创建C++中的一个合并排序算法,它以一个泛型类型的向量作为输入,并对向量中的元素进行排序。 除了每次尝试测试算法时都会出现[run]总线错误(内核转储)错误

合并排序错误 我试图创建C++中的一个合并排序算法,它以一个泛型类型的向量作为输入,并对向量中的元素进行排序。 除了每次尝试测试算法时都会出现[run]总线错误(内核转储)错误,c++,sorting,mergesort,C++,Sorting,Mergesort,我的合并排序代码如下所示: template <typename T> void merge_sort(std::vector<T>& vector) { typename std::vector<T>::iterator middle_value = vector.begin()+vector.size()/2; std::vector<T> left_side(vector.begin(), middle_value);

我的合并排序代码如下所示:

template <typename T>
void merge_sort(std::vector<T>& vector)
{
typename std::vector<T>::iterator middle_value = vector.begin()+vector.size()/2;        std::vector<T> left_side(vector.begin(), middle_value);
    std::vector<T> right_side(middle_value,vector.end());
    merge_sort(left_side);
    merge_sort(right_side);
    std::vector<T> merged;
    int i,j;
    while(i<left_side.size() && j<right_side.size())
    {
    if(left_side.at(i)<right_side.at(j))
    {
        merged.push_back(left_side.at(i));
        i++;
    }
    else
    {
        merged.push_back(right_side.at(j));
        j++;
    }
    }
    while(i<left_side.size())
    {
        merged.push_back(left_side.at(i));
        i++;
    }
    while(j<right_side.size())
    {
        merged.push_back(right_side.at(j));
        j++;
    }
    for(int x=0;x<merged.size();x++)
    vector.at(x)=merged.at(x);


}
模板
无效合并_排序(标准::向量和向量)
{
typename std::vector::iterator middle_value=vector.begin()+vector.size()/2;std::vector left_side(vector.begin(),middle_value);
std::vector right_side(中间_值,vector.end());
合并排序(左侧);
合并排序(右侧);
std::向量合并;
int i,j;

while(i
i
j
未正确初始化。我想您是想将它们设置为零:
int i=0;int j=0;
。此外,当向量为空时(在递归过程中的某个点它将不可避免地为空),您需要停止。您的代码中似乎没有对此采取任何预防措施。是的,我忘记了这段代码是一个愚蠢的错误。但当我添加它以检查向量大小时,它已被修复。