冒泡排序:
步骤思想简述:
(1)从起始,两两比较 数组如:4 2 1 5 6 3 8 9 7
①第一个数 > 第二个数,交换 交换后:2 4 1 5 6 3 8 9 7
②第一个数 < 第二个数,不交换
(2)交换后,依次比较接下来两个数 数组如:2 4 1 5 6 3 8 9 7
①第一个数 > 第二个数,交换 交换后:2 1 4 5 6 3 8 9 7
②第一个数 < 第二个数,不交换
(3)依次比较,交换,例子所示 数组如:2 1 4 5 6 3 8 9 7
不交换:2 1 4 5 6 3 8 9 7
数组如:2 1 4 5 6 3 8 9 7
交换后:2 1 4 5 6 3 8 9 7
数组如:2 1 4 5 6 3 8 9 7
交换后:2 1 4 5 3 6 8 9 7
数组如:2 1 4 5 3 6 8 9 7
交换后:2 1 4 5 3 6 8 9 7
数组如:2 1 4 5 3 6 8 9 7
交换后:2 1 4 5 3 6 8 9 7
数组如:2 1 4 5 3 6 8 9 7
交换后:2 1 4 5 3 6 8 7 9
(4)每一轮结束,都将最大的数该轮的放在最后面 即冒泡排序
并将前面两两比较,小数放前,大数放后。
第一轮结果:2 1 4 5 3 6 8 7 9
第二轮结果:1 2 4 3 5 6 7 8 9 第二轮不管9,9是上一轮最大的
第三轮结果:1 2 3 4 5 6 7 8 9 第二轮不管8 9,8 9都是上一轮最大的
代码附上:
#include<stdio.h> int main() { int n; scanf("%d",&n); int a[n]; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } //输入数组 int temp; //中间值 for(int i=n;i>=1;i--){ //从后往前 例如:第一轮 9为最大,放最后,第二轮8为最大放最后,不用再次比较8和9大小 for(int j=0;j<i-1;j++){ //每轮的交换过程 if(a[j]>a[j+1]){ //交换 temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; // printf("%d %d %d %d\n",i,j,a[j],a[j+1]); } } } for(int i=0;i<n;i++){ //输出数组 printf("%d ",a[i]); } return 0; }
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复