当前位置: 首页 > 知识库问答 >
问题:

C语言中的合并排序实现

诸葛卜霸
2023-03-14

我正在学习如何在c中实现Mergesort,遇到了以下问题。

这是我的合并函数,它将两个排序数组合并为一个排序数组。

void merge(int *list, int *final, int start, int mid, int stop) {
    int h = start;
    int i = start;
    int j = mid + 1;

    while ((h <= mid) && (j <= stop)) {
        if (list[h] <= list[j]) {
            final[i] = list[h];
            h++;
        } else {
            final[i] = list[j];
            j++;
        }
        i++;
    }

    /* CODE A */
    if (h > mid) {
        for (int k = j; k <= stop; k++) {
            final[i] = list[k];
            i++;
        }
    } else {
        for (int k = h; k <= mid; k++) {
            final[i] = list[k];
            i++;
        }
    }
    /* End of CODE A */

    /* CODE B */
    while ( h <= mid) {
        list[i] = final[h];
        i++; h++;
    }

    while ( j <= stop ) {
        list[i] = final[j];
        i++; j++;
    }
    /* End of CODE B */

    for (int k = start; k <= stop; k++) {
        list[k] = final[k];
        printArray(list, 4, "Intermediate Array: ");
    }
}

在任何时候,我都使用代码A或代码B。当我使用代码A时,函数按预期执行。然而,当我使用CODE B时,函数会用随机数据填充数组列表。

printArray是一个自定义函数,用于打印数组、列表。当对一组数字{4,2,6,9}进行排序时,我从printArray函数中得到以下输出:

Intermediate Array: 2 2 6 9 <br>
Intermediate Array: 2 -790123182 6 9<br>
Intermediate Array: 2 -790123182 6 1968115546<br>
Intermediate Array: 2 -790123182 6 1968115546<br>
Intermediate Array: 2 -790123182 6 1968115546<br>
Intermediate Array: 2 -790123182 6 1968115546<br>
Intermediate Array: 2 -790123182 6 1968115546<br>
Intermediate Array: 2 -790123182 6 1968115546<br>

共有1个答案

孔君浩
2023-03-14

在代码B中,从list最终赋值方向错误。试试这个:

/* CODE B */
while ( h <= mid) {
    final[i] = list[h];
    i++; h++;
}

while ( j <= stop ) {
    final[i] = list[j];
    i++; j++;
}
/* End of CODE B */
 类似资料:
  • 如果在这个程序中,我正在输入一个大小7.so的数组从main()merge_sort(arr,0,6)被传递到相应的函数后,条件被检查,如果(0 但我能够理解合并排序(arr,mid1,high);有人打电话吗?但这个程序运行良好。请解释编译器如何调用merge_sort(arr、mid 1、high)

  • 我正在努力解决这个问题,合并两个排序数组(或在这个特定情况下的向量)。当将向量元素记录到控制台时,我得到了非常奇怪的输出。我的理想输出将是所有按顺序排列的数字。 代码如下: 以下是控制台的说明:

  • 我正在尝试做这个多重递归合并排序的迭代版本: 我只需要使这个排序函数可迭代: 合并功能可以相同: 我很难将多重递归函数转换为迭代函数。 谢谢你的问候。

  • 本文向大家介绍C语言实现堆排序的简单实例,包括了C语言实现堆排序的简单实例的使用技巧和注意事项,需要的朋友参考一下 本文通过一个C语言实现堆排序的简单实例,帮助大家抛开复杂的概念,更好的理解堆排序。 实例代码如下:

  • 合并排序通常是对链表排序的首选方式。链表缓慢的随机访问性能使得一些其他算法(如quicksort)表现不佳,而另一些算法(如heapsort)则完全不可能。我一直在努力在链表上做归并排序。它不断返回一个错误。我正在提供我试图执行的代码。请一定要帮我。它不断给出运行时错误。

  • 本文向大家介绍C语言实现冒泡排序算法,包括了C语言实现冒泡排序算法的使用技巧和注意事项,需要的朋友参考一下 BubblSort.c 以上所述就是本文的全部内容了,希望对大家学习C语言能够有所帮助。