mergesorのために以下のCプログラムを作成しました。それから私はgcc compierを使って私のシステムでそれを実行し、それはセグメンテーション違反を与えました。プログラムで何が原因でこのエラーが発生しているのかわかりません。助けてください。マージソートプログラムのセグメンテーションフォルト
#include<stdio.h>
void mergersort(int A[], int, int);
void merge(int A[], int, int, int);
void merge(int A[], int middle, int p, int q) {
int buffer1[30], buffer2[30], i, j, k, n1, n2;
n1 = middle-p+1;
n2 = q-middle;
for (i = p; i <= middle; i++) {
buffer1[i-p] = A[i];
}
for (j = middle+1; j <= q; j++) {
buffer2[j-i] = A[j];
}
i = 0; j = middle; k = 0;
while (i!=n1 || j!=n2) {
if (buffer1[i] <= buffer2[j]) A[k++] = buffer1[i++];
else A[k++] = buffer2[j++];
}
while (i != n1) {
A[k++] = buffer1[i++];
}
while (j != n2) {
A[k++] = buffer2[j++];
}
}
void mergesort(int A[], int p, int q) {
if (p < q) {
int middle = (p+q)/2;
mergesort(A,p,middle);
mergesort(A,middle+1,q);
merge(A,middle,p,q);
}
}
int main() {
int A[] = {56,23,33,1}, i;
mergesort(A,0,3);
for (i = 0; i < 4; i++)
printf("%d", A[i]);
return 0;
}
更新:私は問題を解決しました。私はもっと注意を払う必要がありました。私が変更した後に解決されたセグメンテーションフォルトとは別に|| & &に出力が正しくない。マージ手順でk = 0の代わりに、k = pでなければなりません。マージ内部
セグメンテーションフォルト - >デバッグ! –
入力にいくつの要素を付けましたか? – GoodDeeds
@ GoodDeeds '{56,23,33,1}' –