簡體   English   中英

合並排序程序不會對具有5個以上元素的數組進行排序

[英]Merge sort program doesn't sort array with more than 5 elements

我正在嘗試實現用於合並排序的代碼。 我將以下代碼用於合並排序,您可以在此處查看 問題是當我運行程序時,例如,我要求它對數組[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));
}

關於我犯了什么錯誤的任何建議? 我認為問題出在輸入/輸出過程中,但不確定其確切含義。

您的代碼正在嘗試發展心理能力。 在使用n之前,先使用n然后再使用scanf找出n應該是什么。 這將導致不確定的行為,例如您的代碼僅在少於5個元素時才起作用。

int n, i, *A;
A = (int *)malloc(n);
scanf("%d", &n);

您還沒有分配足夠的內存,因為這將分配n個字節,而int通常為4個字節(或多或少取決於計算機的體系結構)。 確保分配正確內存量的最佳方法是將sizeof(*A)乘以n即A所指向的指針的大小。 這樣可以確保如果將A更改為其他類型,分配代碼將繼續正確。

scanf("%d", &n);
A = malloc(n*sizeof(*A));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM