#include<stdio.h> const int N = 1e5; int a[N]; void swap(int &x,int &y){ int t = x; x = y; y = t; }//交换数字函数 //这是降序 int main() { int n; scanf("%d",&n); for(int i = 0; i < n; i ++)scanf("%d",&a[i]); //冒泡排序 for(int i = 1; i <= n; i ++){ for(int j = 0; j < n; j ++){ if(a[j]<a[j + 1])swap(a[j],a[j + 1]); } } for(int i = 0; i < n; i ++)printf("%d",a[i]); return 0; }这段代码有错误吗
时间: 2024-03-25 11:35:36 浏览: 43
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码中存在错误,具体来说有两处错误:
1. 冒泡排序的内层循环中,判断条件应该是 j < n - i - 1,而不是 j < n。因为每一轮冒泡排序最后一个数字已经排好序了,不需要再次比较。
2. 在输出排序后的数字时,应该在每个数字后面加上空格或换行符,否则数字会连在一起输出。
下面是修改后的代码:
```
#include <stdio.h>
const int N = 1e5;
int a[N];
void swap(int &x, int &y) {
int t = x; x = y; y = t;
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 冒泡排序
for (int i = 1; i <= n; i++) {
for (int j = 0; j < n - i; j++) {
if (a[j] < a[j + 1]) {
swap(a[j], a[j + 1]);
}
}
}
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
经过修改后,这段代码可以正确地对输入的一组数字进行降序排序并输出。
阅读全文