【发布时间】:2014-10-18 18:36:47
【问题描述】:
所以我的问题是,当我尝试运行合并排序算法时,它会在屏幕上写入随机数组,但是当它尝试写入排序数组时,程序会停止工作。我一直在尝试找到我的错误,但到目前为止没有希望。感谢任何帮助。
这是我的代码;
#include <stdio.h>
#include <stdlib.h>
#define LEN 300
#define INF 30000
void merge (int *A, int p, int q, int r){
int i, j, k, n1 , n2 , *L, *R;
n1 = q - p + 1;
n2 = r - q;
L = (int *) malloc (n1* sizeof (int ) + 1);
R = (int *) malloc (n2* sizeof (int )) ;
for (i = 0; i < n1; i++) {
L[i] = A[p + i];
}
for (j = 0; j < n2; j++) {
R[j] = A[q + 1 + j];
}
i = j = 0;
L[n1] = R[n2] = INF ;
for (k = p; k < r; k++) {
if(L[i] <= R[j]){
A[k] = L[i];
i ++;
}
else{
A[k] = R[j];
j ++;
}
}
free(L);
free(R);
}
void mergesort (int *A, int p, int r){
int q;
if(r > (p + 1)){
q = (p + r)/2;
mergesort(A, p, q);
mergesort(A, q + 1, r);
merge(A, p, q, r);
}
}
void sorting_merge(int *A, int n){
mergesort (A, 0, LEN);
}
int main (){
int i, *n;
n = malloc ( sizeof (int )*LEN );
srand (666) ;
for (i = 0; i < LEN ; i++) {
n[i] = rand() % 1000;
printf ("%d ", n[i]);
}
printf ("\n");
sorting_merge(n, LEN);
for (i = 0; i < LEN ; i++) {
printf ("%d ", n[i]);
}
printf ("\n");
free (n);
system("PAUSE");
return 1;
}
【问题讨论】:
-
您应该更具体地了解您遇到的错误以及它们发生的位置。
-
这听起来像是学习使用调试器的绝佳机会。
-
好吧,我尝试在 dev c++ 上使用调试器,但无法运行它。 ^^ 在我更改“R = (int ) malloc (n2 sizeof (int)) ;”之后到“R = (int ) malloc (n2 sizeof (int) + 1) ;”该程序运行得很好,但没有正确排序。我想我搞砸了……
-
malloc (n2 sizeof (int ) + 1)不正确。malloc((n2+1)*sizeof (int))或malloc(n2*sizeof(int) + sizeof(int))。 -
按照您的建议进行更改后,程序仍然运行,但最后仍然给出未排序的数组。我想我在某些函数参数上犯了错误。