C++中的合并排序代码实现

悉达多·索拉夫

我正在尝试使用向量和迭代器在 C++ 中实现合并排序。该程序编译正常,但是当我尝试运行它时,它崩溃了。我尝试调试它但没有成功。

使用数组的实现很简单,但是当我尝试使用向量实现完全相同的算法时,程序无法运行。

#include <iostream>
#include <vector>
#include <algorithm>

void mergesort(std::vector<int>& A, int l, int r);

void merge(std::vector<int>& A, int l, int m, int r);


void mergesort(std::vector<int>& A, int l, int r) {


    if(l < r) {

        int m = l + (r - l) / 2;

        mergesort(A, l, m);

        mergesort(A, m + 1, r);

        merge(A, l, m, r);

    } 
}

void merge(std::vector<int>& A, int l, int m, int r) {

   std::vector<int> L(A.begin() + l, A.begin() + (m - 1));
   std::vector<int> R(A.begin() + m, A.begin() + r);

   std::vector<int>::iterator i = L.begin();
   std::vector<int>::iterator j = R.begin(); 
   std::vector<int>::iterator k = A.begin() + l;

   while(i != L.end() && j != R.end()) {
       if(*i <= *j) {
           *k = *i;
           i++;
       }
       else {
           *k = *j;
           j++;
       }
       k++;
   }

   while(i != L.end()) {
       *k = *i;
       i++;
       k++;
   }

   while(j != R.end()) {
       *k = *j;
       j++;
       k++;
   }
}

void print_vector(std::vector<int> A) {

    std::vector<int>::iterator it;

    for(it = A.begin(); it != A.end(); ++it) {
        std::cout << *it << " "; 
    }
}


int main() {
    std::vector<int> A = {178, 1156, 136, 5, 6, 7};
    mergesort(A, 0, A.size() - 1);

    print_vector(A);
}
马龙

在这个部分

if(l < r) {
    int m = l + (r - l) / 2;
    mergesort(A, l, m);
    mergesort(A, m + 1, r);
    merge(A, l, m, r);

} 

当 r = l + 1 你得到 m = l 然后你调用合并排序要求函数对一个空向量进行排序,而合并排序的代码假设它不为空。

什么是

 std::vector<int> L(A.begin() + l, A.begin() + (m - 1));

在这种情况下?

这应该是进行调试的一个很好的起点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C中调试合并排序实现

来自分类Dev

在C ++中合并排序

来自分类Dev

在C中的合并排序程序中实现冒泡排序时出错

来自分类Dev

在Objective-C中合并排序

来自分类Dev

C++ 合并排序实现中抛出的 std::out_of_range 异常

来自分类Dev

CRLS合并排序边界代码对C代码的理解

来自分类Dev

合并C ++中的排序实现

来自分类Dev

我正在尝试使用c ++中的向量来实现(算法简介(CLRS))中的合并排序算法,但数组未排序,

来自分类Dev

您可以检查在C中实现递归合并排序功能时在哪里出错吗?

来自分类Dev

C中的嵌套合并排序不起作用

来自分类Dev

C ++中合并排序算法的怪异行为

来自分类Dev

C中的合并排序算法无法正常工作

来自分类Dev

C ++中的合并排序程序不起作用

来自分类Dev

迭代合并排序的C ++实现由于堆栈溢出而在大输入大小时崩溃

来自分类Dev

我的 C++ 合并排序代码有什么问题?

来自分类Dev

C ++ 11多线程合并排序

来自分类Dev

在Int C ++数组上合并排序

来自分类Dev

使用向量合并排序(int)C ++

来自分类Dev

合并排序循环链表C

来自分类Dev

C ++使用迭代器合并排序

来自分类Dev

合并排序分段错误c ++

来自分类Dev

C ++-合并排序-无法识别错误

来自分类Dev

在JavaScript中实现合并排序

来自分类Dev

在python中实现合并排序

来自分类Dev

在JavaScript中实现合并排序算法

来自分类Dev

合并排序实现中的“预期的声明”

来自分类Dev

在C-.exe中的数组中合并排序算法未运行?

来自分类Dev

在合并排序C ++中使用合并时的随机值

来自分类Dev

合并排序不正确的排序(C ++)