[英]Merge Sort doesn't work for a table of integers with more than 521096 elements
[英]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.