私はプログラミングの初心者です。私はK.N.Kingの "C Programming:A Modern Approach"を行っています。今、私は第9章のプログラミングプロジェクト1をやろうとしていますが、セグメンテーションを続けると、コードに何が間違っているのか分かりません。どんな修正もありがとう!Cの配列ソートアルゴリズムのSegfaultエラー
これらの命令です:
は、(それが配列に格納)一連の整数を入力するようユーザに要求するプログラムを書き、その関数のselection_sortを呼び出すことによって、整数をソートします。配列要素がn個あるとき、selection_sortは以下を実行する必要があります。
1.配列を検索して最大の要素を見つけ、配列の最後の位置に移動します。
2.再帰的に呼び出して、配列の最初のn - 1要素をソートします。
#include <stdio.h>
void selection_sort(int n, int a[n]);
int main(void)
{
int n;
printf("Number of integers to sort: ");
scanf("%d", &n);
int a[n];
printf("Enter the integers: ");
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
selection_sort(n, a);
printf("Sorted array: ");
for (int i = 0; i < n; i++)
printf("%d", a[i]);
return 0;
}
void selection_sort(int n, int a[n])
{
int swap, max = a[n - 1];
for (int i = 0; i < n; i++) {
if (a[i] > max) {
max = a[i];
swap = a[n - 1];
a[n - 1] = max;
a[i] = swap;
}
}
if (n > 1)
selection_sort(n - 1, a);
}
EDIT:
は、これは私のコードである(N> 1)しばらく(N> 1)の場合に変更し、今では完璧に動作します。しかし、なぜそれが間に動作しないのですか?
ような何かを行うことができます呼び出す延々と避けるために、再帰のためのいくつかの基本条件を持っている必要がありますか? – SurvivalMachine
Hello無限再帰...ある時点で再帰を中断する必要があります(停止する必要があるかどうかを確認するベースケースを使用します)。 – jpw
C言語を学ぶときは、デバッガの使用方法も学ぶことが大切です。このコードをシングルステップ実行すれば、どこに問題があるのかが明らかになります。 –