功能:用选择法对10个整数进行升序排序。 ------------------------------------*/ #include <stdio.h> #define N 5 void main() { int i,j,min,t,n=N,a[N]; printf("请输入%d个需要排序的整数:\n",n); //用循环实现对数组中十个元素的输入 for(i=0;i<N;i++) scanf("%d",&a[i]); /*用选择法对数组中十个数进行排序*/ for(i=0;i<N-1;i++) { min=i; /*假定下标为i的元素是无序表中最小的元素*/ for(j=i+1;j<N;j++) /*用假定的最小值与其后面的每一个元素进行比较*/ /**************ERROR***************/ if(a[min]<a[j]) min=j; /*一旦发现更小的元素,则用min记录其下标*/ if(min!=i) /*找到的最小值,如果不是无序表中的第一个元素,则两者交换*/ { t=a[i]; /**************ERROR***************/ a[min]=a[i]; a[min]=t; } } printf("用选择法排序后的数据是:\n"); /*用循环实现对数组中十个元素的输出*/ for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); }
时间: 2023-07-23 09:20:39 浏览: 86
在上述代码中,存在两处错误:
1. 在选择排序中,应该是找到无序表中的最小值,而不是最大值。因此,需要将第17行的条件改为`if(a[min]>a[j])`。
2. 在交换两个元素的时候,第22行的代码存在错误。应该是将`a[i]`赋值给临时变量`t`,然后将`a[min]`赋值给`a[i]`,最后再将`t`赋值给`a[min]`。因此,需要将第22行的代码改为:
```
t=a[i];
a[i]=a[min];
a[min]=t;
```
修改后的代码如下所示:
```
#include <stdio.h>
#define N 5
void main() {
int i,j,min,t,n=N,a[N];
printf("请输入%d个需要排序的整数:\n",n);
for(i=0;i<N;i++) {
scanf("%d",&a[i]);
}
for(i=0;i<N-1;i++) {
min=i;
for(j=i+1;j<N;j++) {
if(a[min]>a[j]) {
min=j;
}
}
if(min!=i) {
t=a[i];
a[i]=a[min];
a[min]=t;
}
}
printf("用选择法排序后的数据是:\n");
for(i=0;i<N;i++) {
printf("%d ",a[i]);
}
printf("\n");
}
```
修改后的代码已经可以正确地对输入的整数进行升序排序。
阅读全文