算法1:冒泡排序
算法1:冒泡排序
基本思想:每次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。
算法分析:
例如:将 12 35 99 18 76 这5个数按从大到小排序
- 第一轮
第一轮
筛选出最小的数值,并归为 - 第二轮
第二轮
第二轮筛选出第二小的,由于第一轮最小值已经归位,所以只用比较到如图红线处。 - 第三轮
第三轮
第三轮筛选出第三小的,由于第一轮、第二轮值已经归位,所以只用比较到如图红线处。 - 第四轮
第四轮
第四轮筛选出最大的的,由于第一轮、第二轮值,三轮已经归位,所以只用比较到如图红线处。 - 总结
可以看出,当一组n个数值排序,需要经历,n-1轮筛选归为,随着一轮轮数值归位,每一轮比较的次数递减。
代码实现
1include <stdio.h>
2{
3 int a[100];
4 int i,j,t,n;
5 scanf("%d",&n); /* 输入一个数n ,表示有n个数需要排序 */
6 fot(i = 0;i<n;i++)
7 {
8 scanf("%d",&a[i]); /* 循环读入n个数到数组a中 */
9 // 冒泡核心算法
10 for(i = 0; i < n-1;i++)
11 {
12 for(j = 0; j < n -i;j++)
13 {
14 if(a[j] < a[j+1]) /* 比较大小并交换值 */
15 {
16 t = a[j];
17 a[j] = a[j+1];
18 a[j+1] = t;
19 }
20 }
21 }
22 }
23 /* 输出结果 */
24 for(i = 0; i<n;i++)
25 printf("%d ",a[i]);
26
27}