【发布时间】:2016-11-27 11:16:06
【问题描述】:
我是编程初学者,我正在阅读 K.N.King 的“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);
}
编辑:将 while (n > 1) 更改为 if (n > 1),现在它可以正常工作了。但是为什么它不能与 while 一起工作呢?
【问题讨论】:
-
段错误在哪里?
-
你好无限递归......你需要在某个时候打破递归(使用一个基本情况来检查它是否应该停止)。
-
在学习 C 语言时,您还必须学习使用调试器。单步执行此代码将清楚问题所在。
-
或者只是在 selection_sort 开始时打印参数