合并排序程序不会对具有5个以上元素的数组进行排序

时间:2019-01-15 14:14:17

标签: c io

我正在尝试实现用于合并排序的代码。我将以下代码用于合并排序,您可以查看here。问题是当我运行程序时,例如,我要求它对数组[1、2、3、4、6、5]进行排序,然后打印出排序后的数组,然后返回数组[-1560047667 1 2 3 4 5]。从我观察到的结果来看,它不会正确打印数组中最大元素的值。我的代码如下:

#include<stdio.h>
#include<stdlib.h>

void merge_sort(int A[], int start, int end){
    My code for merge sort 
    goes here
}

int main(){
    int n, i, *A;
    A = (int *)malloc(n);
    scanf("%d", &n);
    for(i=0; i<n; i++) scanf("%d", A+i);
    merge_sort(A, 0, n);
    for(i=0; i<n; i++) printf("%d", *(A+i));
}

关于我犯了什么错误的任何建议?我认为问题出在输入/输出过程中,但不太确定它到底是什么。

1 个答案:

答案 0 :(得分:2)

您的代码正在尝试发展心理能力。在使用n之前,您正在使用scanf,之后使用n来确定int n, i, *A; A = (int *)malloc(n); scanf("%d", &n); 应该是什么。这将导致不确定的行为,例如您的代码仅在少于5个元素的情况下起作用。

n

您还没有分配足够的内存,因为这将分配int个字节,而n通常为4个字节(或多或少取决于计算机的体系结构)。确保分配合适的内存量的最佳方法是将sizeof(*A)乘以A倍数-这就是A所指向的大小。这样可以确保如果将scanf("%d", &n); A = malloc(n*sizeof(*A)); 更改为其他类型,分配代码将继续正确。

200