冒泡排序
H5,H5页面制作工具
- 序
- 排
- 泡
- 冒
- 案例引入:
- 我们很轻易的就做好了排序。那么计算机是如何完成这一任务的呢?
- 有五张牌,大家会如何实现排序呢?
- 6
- 卡片
- 4
- 卡片
- 9
- 卡片
- 6
- 卡片
- 3
- 卡片
- 案例分析:
- 4 3 6 6 9
- 4 3 6 6 9
- 第二趟:4 6 3 6 9
- 原始数据:6 9 4 3 6
- 6 4 3 6 9
- 6 4 9 3 6
- 6 4 3 9 6
- 第一趟:6 9 4 3 6
- 原理:大数下沉,每连续的两个数进行比较,大的数下沉至底。
- 案例分析:
- 每趟排序需要交换几次?
- 每一趟排序需要比较几次?
- 思考一下:n个数排序需要几趟?
- 第四趟:3 4 6 6 9
- 第三趟:3 4 6 6 9
- 3 4 6 6 9
- 每趟交换次数是不固定的最多交换次数:(3,4,6,6,9)第1 趟: n-1次第2 趟: n-2次…… ……第n-1 趟: 1次最少交换次数:03,4,6,6,9
- 每趟排序需要交换几次呢?
- 第1 趟: n-1次第2 趟: n-2次…… ……第n-1 趟: 1次
- 那么每一趟排序需要比较几次?
- N-1趟
- N个数排序需要几趟?
- 短信对话
- 代码展示:
- #include "stdio.h"void main(){int a[10];int i, j, temp;printf("Please input ten numbers: \n");for (i = 0; i < 10; i++)scanf("%d", &a[i]);for (i = 0; i < 9; i++) // 10个数,10 - 1轮冒泡,每一轮都将当前最大的数推到最后{for (j = 0; j < 9 - i; j++) // 9 - i,意思是每当经过一轮冒泡后,就减少一次比较if (a[j] > a[j+1]){temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}// 打印排序结果for (i = 0; i < 10; i++)
- 小结:
- 认真理解今天的代码,下去多做练习和尝试,相信大家会有更加有趣的收获,一个小任务~大家回去想一下这个算法可以优化吗?可以的话,如何优化呢?