合并排序-堆栈损坏错误

维尼特

我正在用C ++编写基本的合并排序代码。当我在功能merge()中运行以下代码时,变量b的堆栈损坏异常。我只是不知道我在做什么错。任何帮助都受到高度赞赏!

这是我的代码:

template <class T>
class mSort 
{
    void mergeSort(T *a, int low, int high);
    void merge(T *a, int low, int mid, int high);
public:
    mSort(T* a, int size);
};

template<class T>
mSort<T>::mSort(T *a, int size)
{
    mergeSort(a, 0, size);
}
template<class T>
void mSort<T>::mergeSort(T *a, int low, int high)
{
    int m;
    if (low < high)
    {
        m = (low + high) / 2;
        //printf("mergeSort:low[%d], mid [%d], high [%d]\n", low, m, high);
        mergeSort(a, low, m);
        mergeSort(a, m+1, high);
        merge(a, low, m, high);
    }
}

template<class T>
void mSort<T>::merge(T *a, int low, int mid, int high)
{
    int b[20];
    int i = low, j = mid + 1, k = 0;

    while (i <= mid && j <= high) {
        if (a[i] <= a[j])
            b[k++] = a[i++];
        else
            b[k++] = a[j++];
    }
    while (i <= mid)
        b[k++] = a[i++];

    while (j <= high)
        b[k++] = a[j++];

    k--;
    while (k >= 0) {
        a[low + k] = b[k];
        k--;
    }
}

输入数组:int a [20];

#define prep_intput_array(a,n)\
for (int i = 0; i < n; i++)\
{\
    a[i] = rand() % 65535;\
}\

像这样调用合并排序例程:

mSort<int> m1(a, 20);

代码基于此链接中的合并排序

维克拉姆·巴特(Vikram Bhat)

high是通过数组中的最高索引size-1传递的,但是您传递的size大于数组中最高索引的索引,因此您可能会遇到错误。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

合并排序-堆栈损坏错误

来自分类Dev

合并排序堆栈溢出错误

来自分类Dev

合并排序算法错误

来自分类Dev

错误合并排序输出

来自分类Dev

合并排序-细分错误

来自分类Dev

合并排序错误 + 警告

来自分类Dev

执行合并排序算法的系统堆栈错误

来自分类Dev

合并排序会产生堆栈溢出

来自分类Dev

超出合并排序调用堆栈

来自分类Dev

合并排序混乱,堆栈级别太深?

来自分类Dev

合并排序错误:分段错误

来自分类Dev

Python中的简单合并排序错误

来自分类Dev

F#错误和合并排序

来自分类Dev

无法找出合并排序中的错误

来自分类Dev

合并排序链表给出细分错误

来自分类Dev

合并排序分段错误c ++

来自分类Dev

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

来自分类Dev

Python中的简单合并排序错误

来自分类Dev

是否可以使用合并排序对堆栈进行排序?

来自分类Dev

如何在我的“合并排序”实现中发现错误?

来自分类Dev

天真的指针算术合并排序返回错误

来自分类Dev

合并排序中具有cout的分段错误

来自分类Dev

Haskell合并排序中的编译错误

来自分类Dev

超出范围错误-合并排序算法

来自分类Dev

我在合并排序时遇到细分错误

来自分类Dev

此合并排序实现中的错误是什么?

来自分类Dev

拆分反转的合并排序实现中的错误在哪里

来自分类Dev

合并排序程序中的 Ocaml 类型错误

来自分类Dev

合并排序(分段错误(Xore Dumped))C++