【程序改错】 功能:用选择法对数组中的n个元泰按从小到大的顺序进行排序 #include <stdio.h> #define N 20 void fun(int a[], int n) { int i,j, t, p; for (j= 0 j< n-1j++) { p=j for (i = j;i < n; i++) if(a[i]>a[p]) p=j; t = a[p] ; a[p] = a[j] ; a[j]=t; } } void main(void) { int a[N]={9,6,8,3,-1},i, m = 5;printf("排序前的数据:"); for(i=0;i<m;i++) printf("%d",a[i]); printf("\n"); fun(a,m); printf("排序后的数据:"); for(i=0;i<m;i++) printf("%d ",a[i]); printf("\n”); }
时间: 2023-12-03 17:41:55 浏览: 71
C语言程序设计-编写函数用选择排序法对数组中的数据进行从小到大的排序;
5星 · 资源好评率100%
修改后的程序如下:
```c
#include <stdio.h>
#define N 20
void fun(int a[], int n) {
int i, j, t, p;
for (j = 0; j < n - 1; j++) {
p = j;
for (i = j + 1; i < n; i++)
if (a[i] < a[p])
p = i;
t = a[p];
a[p] = a[j];
a[j] = t;
}
}
int main(void) {
int a[N] = {9, 6, 8, 3, -1}, i, m = 5;
printf("排序前的数据:");
for (i = 0; i < m; i++)
printf("%d ", a[i]);
printf("\n");
fun(a, m);
printf("排序后的数据:");
for (i = 0; i < m; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
```
修改说明:
1. 第7行,将`j< n-1j++`修改为`j< n-1`,`j++`应该在循环语句中使用。
2. 第8行,将`p=j`修改为`p=j`,这是选择排序的核心,找到最小元素的下标。
3. 第9行,将`i = j`修改为`i = j + 1`,因为`a[p]`已经在前面的循环中确定了,所以从下一个位置开始比较。
4. 第11行,将`if(a[i]>a[p])`修改为`if (a[i] < a[p])`,找到最小的元素。
5. 第16行,将`printf("排序前的数据:");`修改为`printf("排序前的数据:");`,去掉多余的分号。
6. 第21行,将`printf("排序后的数据:");`修改为`printf("排序后的数据:");`,去掉多余的分号。
7. 第23行,添加`return 0;`语句,表示程序正常结束。
阅读全文