冒泡排序

一.题目条件

·题目

将输入的10个整数,按从小到大的顺序输出(使用,作为间隔)。

·要求

1、逗号为英文输入法中逗号;
2、任意多余输出视为错误。

·测试

输入:10 9 8 7 6 5 4 3 2 1
输出:1,2,3,4,5,6,7,8,9,10

二.题目分析

  1. 简述冒泡排序:

冒泡排序就是重复“从序列一边开始比较相邻两个数字的大小,再根据比较结果选择交换或不交换两个数字的位置”这一操作的算法。——引用自《我的第一本算法书》

冒泡排序实际用到一个嵌套的循环:
①外层: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;
}
posted @ 2021-05-18 17:04  酸柚子sour  阅读(307)  评论(0)    收藏  举报
Akizuki-Kanna