我的 C++ 合并排序代码不起作用。我在这里缺少什么?

用户11555625

在我的代码中,lb指的是下界,ub指的是上限。我使用mergeSort function将数组递归拆分为更小的部分,并按merge function排序顺序合并。

#include <iostream>
using namespace std;

void merge(int input[], int lb, int ub, int size)
{
    int i = lb;
    int k = 0;
    int mid = (lb + ub) / 2;
    int j = mid + 1;

    int *arr = new int[size];

    while (i <= mid && j <= ub)
    {
        if (input[i] <= input[j])
            arr[k++] = input[i++];
        else
            arr[k++] = input[i++];
    }
    while (i <= mid)
        arr[k++] = input[i++];
    while (j <= ub)
        arr[k++] = input[j++];

    for (k = 0; k < size; k++)
        input[k] = arr[k];
}
void mergeSort(int input[], int size)
{
    int lb = 0;
    int ub = size - 1;
    int mid;
    if (size == 0)
    {
        return;
    }
    else if (lb < ub)
    {
        mid = (lb + ub) / 2;
        mergeSort(input, mid - lb + 1);
        mergeSort(input + mid + 1, ub - mid);
        merge(input, lb, ub, size);
    }
    else
    {
        return;
    }
}

int main()
{
    int input[1000], length;
    cin >> length;
    for (int i = 0; i < length; i++)
        cin >> input[i];
    mergeSort(input, length);
    for (int i = 0; i < length; i++)
    {
        cout << input[i] << " ";
    }
}
之字形剃刀

您在合并函数的第一个 while 循环中使用了 i 而不是 j 。正确的代码如下

while (i <= mid && j <= ub) { 
        if (input[i] <= input[j]) 
           arr[k++] = input[i++]; 
       else 
           arr[k++] = input[j++];     
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的 FOR 循环在这里不起作用?

我在这里做错了什么?parse_item_page 对我不起作用

c中的链表(我在这里做错了什么?)

为什么我的合并排序算法不起作用?

我在这里缺少什么权限?

我在这里缺少什么许可?

在Go中,为什么我的JSON解码在这里不起作用?

为什么ThemeProvider(材料UI)在这里对我不起作用?

不知道为什么我的循环功能在这里不起作用

Objective-C,为什么我需要在这里而不是在这里放星号

C 代码不断闪烁错误,想知道我是否可以在这里得到帮助?

C ++我可以在这里使用数组来缩短代码吗?

我在这里缺少什么?(对证人标签的困惑)

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

我在这里用什么代替 int ?C# CMD

插入排序(降序)-我在这里想念什么?

什么在这里干扰我的作用域类型变量?

谁能告诉我为什么我的最后两个 if else 语句不起作用?全新的 JavaScript 在这里

我的代码在这里怎么了?

为什么我的 ICMP Ping TTL 参数在我的 C 代码中不起作用

我在这里想念什么?

我要在这里同步什么?

我在这里做错了什么

读取文本文件在解密中不起作用,我在这里哪里出错了?

为什么我的自适应选择排序算法在C ++中不起作用

您的代码格式与建议不同 - 我是新人,为什么我在这里

C++ 代码不起作用,我的输出屏幕崩溃了

我的 C++ 代码不起作用(用于类声明)

我在做Promises错误...我在这里想念什么?