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