gpt4 book ai didi

无法发现合并排序中的错误

转载 作者:行者123 更新时间:2023-11-30 21:02:54 25 4
gpt4 key购买 nike

l & h 对应于数组 a 中第一个和最后一个元素的索引:-单独的分区和合并功能运行良好。请解释两个函数链接时发生的错误。

#include <stdio.h>
void mergesort(int a[], int l, int h);
void merge (int a[], int l, int m, int h);
int main ()
{
int a[] = {5,4,9,0,8,6,1,3,2,7}, i;
mergesort (a, 0, 5);
for (i = 0; i < 10; i++)
printf ("%d ", a[i]);
return 0;
}
void mergesort(int a[], int l, int h)
{
if (l == h)
return;
int m = (l + h) / 2;
mergesort (a, l, m);
mergesort (a, m + 1, h);
merge(a, l, m, h);
}
void merge (int a[], int l, int m, int h)
{
int t[h - l + 1], i = l, j = m + 1, k = 0;
while (i <= m && j <= h) {
if (a[i] < a[j]){
t[k] = a[i];
k++;
i++;
}
if (a[j] < a[i]) {
t[k] = a[j];
j++;
k++;
}
}
if (i != m) {
while (i <= m) {
t[k] = a[i];
k++;
i++;
}
}
if (j != h) {
while (j <= h) {
t[k] = a[j];
k++;
j++;
}
}
for (i = 0; i <= (h - l); i++)
a[l + i] = t[i];
}

而不是所需的输出

0 4 5 6 8 9 1 3 2 7

(元素 0 到 5(含)已排序),它会产生一些垃圾,例如

0 4 6 9 2686712 32 1 3 2 7

最佳答案

if (i != m)if (j != h)必须是if (i <= m)if (j <= h) .

此外,您也可以省略它们,因为它们是多余的(仅保留 while 条件)。更少的代码,更少的错误。

关于无法发现合并排序中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27503287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com