【发布时间】:2018-11-29 17:42:19
【问题描述】:
对于给定的输入1 5 4 2,这是 c 中合并排序的实现,我得到的输出为1 2 5 4 请明天是我的 sem 结束考试,这将非常有帮助 请帮助
我尽力调试了很多次,但我找不到错误,因为一切都在递归中
如果你能告诉我的错误就可以了 提前谢谢
#include<stdio.h>
#include<stdlib.h>
void merge(int* A, int* left, int* right, int nl, int nr) {
int i = 0, j = 0, k = 0;
while (i < nl&&j < nr) {
if (left[i] < right[j]) {
A[i] = left[j];
i++;
j++;
}
else {
A[i] = right[k];
i++;
k++;
}
}
while (j < nl) {
A[i] = left[j];
i++;
j++;
}
while (k < nr) {
A[i] = right[k];
k++;
i++;
}
}
void mergesort(int* A, int n) {
if (n < 2)
return;
int mid = n / 2;
int* left = (int*)malloc(sizeof(int) * 4);
int* right = (int*)malloc(sizeof(int) * 4);
for (int i = 0; i < mid; i++) {
left[i] = A[i];
}
for (int i = mid; i < n; i++) {
right[i - mid] = A[i];
}
mergesort(left, mid);
mergesort(right, n - mid);
merge(A, left, right, mid, n - mid);
}
int main() {
int* a = (int*)malloc(sizeof(int) * 4);
a[0] = 1;
a[1] = 5;
a[2] = 4;
a[3] = 2;
//quicksort(a,0,3);
mergesort(a, 4);
printf("%d %d %d %d", a[0], a[1], a[2], a[3]);
}
【问题讨论】:
-
除了改用mergesort之外,这和your quicksort question真的没有什么不同。调试仍然是 IMO 的关键。此外,您的代码中有很多内存泄漏。
-
请排序章节将在印度明天晚上 11 点到来,我有考试请帮帮我
-
你搞砸了
i,j,k索引。首先给它们起有意义的名称(例如 done、ll、rr ...) -
欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 On topic、how to ask 和 ... the perfect question 在此处申请。 StackOverflow 不是设计、编码、研究或教程资源。
-
我们在许多方面都是编程新手。这里最直接的问题是,您需要的帮助水平与 Stack Overflow 根本不匹配——但您接近。