//15年 冒泡排序 #include<stdio.h> //数组上限的长度 #define ARR_LEN 255 //元素类型 #define elemType int //从第一个数字开始,两两进行比较,小的数字以前面大的数字交换位置 void bubbleSort(elemType arr[],int len){ elemType temp; int i,j; // 第一个for循环为排序趟数 i for(i=0;j<len-1;i++){ // 第二个for循环为比较次数 j for(j=0;j<len-1;j++){ // 相邻数字比较,小数交换 定义一个中间变量 if(arr[j]>arr[j+1]) temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } int main(void){ elemType arr[ARR_LEN]={-99, 37, 65, -81}; int len=4; int i; bubbleSort (arr,len); for(i=0;i=len;i++) printf("%d\t ",arr[i]); putchar('\n'); return 0; } 代码的问题
时间: 2024-04-16 14:27:36 浏览: 156
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码存在几个问题:
1. 在第一个for循环中,循环的条件应为`i<len-1`,而不是`j<len-1`。
2. 在第一个for循环的最后一行,应该是`i++`而不是`i++`。
3. 在第二个for循环中,应该是`j<len-1-i`,而不是`j<len-1`。因为每一趟排序都会将最大的数沉到最后,所以下一趟排序时就可以少比较一次。
4. 在交换元素的代码块中,需要使用大括号将多行代码包裹起来。即使只有一行代码,也建议使用大括号,以增加代码的可读性和可维护性。
5. 在最后的for循环中,条件应为`i<len`,而不是`i=len`。
修正后的代码如下:
```c
#include<stdio.h>
#define ARR_LEN 255
typedef int elemType;
void bubbleSort(elemType arr[], int len) {
elemType temp;
int i, j;
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main(void) {
elemType arr[ARR_LEN] = { -99, 37, 65, -81 };
int len = 4;
int i;
bubbleSort(arr, len);
for (i = 0; i < len; i++) {
printf("%d\t", arr[i]);
}
putchar('\n');
return 0;
}
```
修复后的代码可以正确进行冒泡排序,并输出排序后的结果。
阅读全文