#include <stdio.h> void print(int a[], int n) { //输出数组元素,数字之间以一个空格为界,输出结束后换一行 for (int i = 0; i < n; i++) { printf("%d ", a[i]); } printf("\n"); } void bubbleSort(int a[], int n) //对数组a中的n个元素进行排序,调用print函数输出每趟排序后的结果 { int i, j; int t; _Bool flag; // 增加一个标志位 for (i = 0; i < n - 1; i++) { flag = 0; // 初始化为 false for (j = 0; j < n - i - 1; j++) { if (a[j] > a[j + 1]) { t = a[j + 1]; a[j + 1] = a[j]; a[j] = t; flag = 1; // 如果进行了交换,将标志位设为 true } } if (!flag) { // 如果一趟冒泡排序没有进行任何交换,说明数组已经有序,直接退出排序 break; } print(a, n); } } //print(a,n); int main(void) { int num; scanf("%d", & num); int data[num]; for (int i = 0; i < num; i++) scanf("%d", & data[i]); bubbleSort(data, num); }当输入的数据是5 1 2 3 4 5时,怎样改写代码才能输出1 2 3 4 5
时间: 2024-03-12 15:44:00 浏览: 83
猜数字 C++ #include<stdio.h>
在代码中增加一个不输出换行符的print函数,将最后一次排序后的结果输出即可。具体修改如下:
```c
#include <stdio.h>
void print(int a[], int n) {
for (int i = 0; i < n; i++) {
printf("%d", a[i]);
if (i != n - 1) {
printf(" ");
}
}
}
void bubbleSort(int a[], int n) {
int i, j;
int t;
_Bool flag;
for (i = 0; i < n - 1; i++) {
flag = 0;
for (j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
t = a[j + 1];
a[j + 1] = a[j];
a[j] = t;
flag = 1;
}
}
if (!flag) {
break;
}
}
print(a, n);
}
int main(void) {
int num;
scanf("%d", &num);
int data[num];
for (int i = 0; i < num; i++)
scanf("%d", &data[i]);
bubbleSort(data, num);
return 0;
}
```
这样修改后,当输入的数据是5 1 2 3 4 5时,输出结果就是1 2 3 4 5。
阅读全文