冒泡排序
一.题目条件
·题目
将输入的10个整数,按从小到大的顺序输出(使用,作为间隔)。
·要求
1、逗号为英文输入法中逗号;
2、任意多余输出视为错误。
·测试
输入:10 9 8 7 6 5 4 3 2 1
输出:1,2,3,4,5,6,7,8,9,10
二.题目分析
- 简述冒泡排序:
冒泡排序就是重复“从序列一边开始比较相邻两个数字的大小,再根据比较结果选择交换或不交换两个数字的位置”这一操作的算法。——引用自《我的第一本算法书》
冒泡排序实际用到一个嵌套的循环:
①外层:n个数总共要比较n-1轮。
②内层:每一轮都要比较相邻两个数之间的大小,确定出这组数的最值并放在一边。
2. 用一个1维数组来存放这10个数。
代码实现
#include <stdio.h>
int main() {
int array[10];
int i;
int j;
int max;
int n = 10;
scanf_s("%d%d%d%d%d%d%d%d%d%d", &array[0], &array[1], &array[2], &array[3], &array[4], &array[5], &array[6], &array[7], &array[8], &array[9]);
for (i = 0; i < 9; i++) {
for (j = 0; j < n - i - 1; j++) {
if (array[j] > array[j + 1]) {
max = array[j];
array[j] = array[j + 1];
array[j + 1] = max;
}
}
}
printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7], array[8], array[9]);
return 0;
}
注:scanf_s那一串是为了配合码图奇葩的输入方式;实际使用建议使用if循环输入。
(好吧,还是写一下)
四.改进
#include <stdio.h>
int main() {
int array[10];
int i;
int j;
int k;
int max;
int n = 10;
for (k = 0; k < 10; k++){
scanf_s("%d", &array[k]);
}
for (i = 0; i < 9; i++) {
for (j = 0; j < n - i - 1; j++) {
if (array[j] > array[j + 1]) {
max = array[j];
array[j] = array[j + 1];
array[j + 1] = max;
}
}
}
printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7], array[8], array[9]);
return 0;
}

浙公网安备 33010602011771号