//15年 选择排序 #include<stdio.h> //数组上限的长度 #define ARR_LEN 255 //元素类型 #define elemType int //从第一个数字开始,两两进行比较,小的数字以前面大的数字交换位置 int main(void){ int arr={-99, 37, 65, -81}; int len=4; int i; for(i=0;i<len-1;i++){ //每轮比较次数 for(int j=i+1;j<3;j++){ if(arr[j]>arr[j+1]){ temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } for(int i=0;i<4;i++){ printf("%d\t",arr[i]) } } return 0; } 的问题
时间: 2024-04-16 16:27:45 浏览: 84
这段代码存在几个问题:
1. 在定义数组`arr`时,应使用方括号`[]`而不是大括号`{}`。
2. 在第二个for循环中,循环变量`j`应该从`i+1`开始,而不是从`0`开始。
3. 在第二个for循环中,循环条件应为`j<len`,而不是`j<3`。因为数组长度为4,所以应该是`j<len`。
4. 在交换元素的代码块中,需要定义一个临时变量`temp`,并将交换操作放在大括号中。
5. 在最后的for循环中,循环变量`i`的作用域与外部的`i`冲突,应该使用另一个变量名。
6. 在最后的for循环中,缺少了分号`;`。
修正后的代码如下:
```c
#include<stdio.h>
#define ARR_LEN 255
typedef int elemType;
int main(void) {
elemType arr[ARR_LEN] = { -99, 37, 65, -81 };
int len = 4;
int i, j, temp;
for (i = 0; i < len - 1; i++) {
for (j = i + 1; j < len; j++) {
if (arr[j] > arr[i]) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
for (i = 0; i < len; i++) {
printf("%d\t", arr[i]);
}
putchar('\n');
return 0;
}
```
修复后的代码可以正确进行选择排序,并输出排序后的结果。
阅读全文