[英]Segfault error in array sorting algorithm in C
我是編程的初學者,並且正在研究KNKing的“ C編程:一種現代方法”。 現在,我正在嘗試進行第9章的編程項目1,但我一直遇到段錯誤,並且不確定代碼出了什么問題。 任何更正表示贊賞!
這些是說明:
編寫一個程序,要求用戶輸入一系列整數(將其存儲在數組中),然后通過調用函數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);
}
編輯:從(n> 1)更改為if(n> 1),現在可以正常使用了。 但是為什么它一段時間不起作用?
您需要不調用selection_sort
的條件。 現在,您的selection_sort
始終會調用selection_sort
,這將導致無限循環。
而且,由於在每一步中遞減n
,所以在某一點它變為負數,然后開始訪問a[-1]
,這是錯誤的。
您需要為遞歸提供一些基本條件,以避免無休止地調用相同的函數。您可以執行類似的操作
void selection_sort(int n, int a[])
{
if(n<=0)return; //base condition
int swap, max = a[n - 1];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.