冒泡排序
2016-04-22 17:49
323 查看
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。
至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
用二重循环实现,外循环变量设为i,内循环变量设为j。假如有10个数需要进行排序,则外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,j的值依次为1,2,...10-i。
举例:
青歌赛冒泡排序做法,青歌赛打分:20位评委给一个选手打分,去掉一个最高分,去掉一个最低分求歌手的平均得分。
星光大道投票,用switch 完善,20个评委给5个选手投票,输出票数
至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
用二重循环实现,外循环变量设为i,内循环变量设为j。假如有10个数需要进行排序,则外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,j的值依次为1,2,...10-i。
举例:
static void Main(string[] args) { //冒泡排序,从小到大排列 int[] a = new int[10] { 9, 10, 5, 8, 7, 4, 3, 1, 6, 2 }; for (int i = 0; i <a.Length; i++)//外层循环 { for (int j = i; j <a.Length-1; j++)//内层循环 { if (a[i]>a[j+1]) { int zhong=a[i]; a[i] = a[j + 1]; a[j + 1] = zhong; } } } for (int i = 0; i <a.Length; i++) { Console.WriteLine(a[i]); } }
青歌赛冒泡排序做法,青歌赛打分:20位评委给一个选手打分,去掉一个最高分,去掉一个最低分求歌手的平均得分。
static void Main(string[] args) { //青歌赛冒泡排序,青歌赛打分:20位评委给一个选手打分,去掉一个最高分,去掉一个最低分求歌手的平均得分。 //定义一个数组接收每一个评委的打分。 int[] fenshu = new int[20]; for (int i = 0; i < 20; i++)//打分 { Console.WriteLine("请{0}号评委给选手打分:", i + 1); fenshu[i] = Convert.ToInt32(Console.ReadLine()); } for (int i = 0; i <fenshu.Length; i++) //冒泡排序,成绩从大到小依次排列 { for (int j = i; j < fenshu.Length-1; j++) { if (fenshu[i]<fenshu[j+1]) { int zhong=fenshu[i]; // 定义中间值 fenshu[i] = fenshu[j + 1]; fenshu[j + 1] = zhong; } } } Console.WriteLine("去掉一个最低分{0},去掉一个最高分{1}",fenshu[19],fenshu[0]);//最高分经过数组冒泡排序后存放在数组的第一个,最低分存放在数组的最后一个 double sum = 0; for (int i = 1; i < 19; i++)//平均分是去掉最高分和最低分以后的18个分数的平均分 { sum+=fenshu[i]; } double avg = sum / 18; Console.WriteLine("歌手的平均分是:{0}",avg); }
星光大道投票,用switch 完善,20个评委给5个选手投票,输出票数
static void Main(string[] args)// { //星光大道投票,用switch 完善,20个评委给5个选手投票,输出票数 //定义数组当做选手 int[] star = new int[5]{0,0,0,0,0}; //定义数组存放20个评委的投票 int [] pingwei=new int[20]; //接收20个投票 for (int i = 0; i < 20; i++) { Console.WriteLine("请第"+(i+1)+"位选手进行投票:(输入1-5代表支持的选手)"); pingwei[i] = Convert.ToInt32(Console.ReadLine()); } //定义一个作废的票数来存放废票 int fei = 0; //遍历20个票,给每一位选手加上票数,不是1-5的视为废票 for (int i = 0; i < 20; i++) { switch (pingwei[i]) { case 1: star[0]++; break; case 2: star[1]++; break; case 3: star[2]++; break; case 4: star[3]++; break; case 5: star[4]++; break; default: fei++; break; } } //遍历打印每位选手的票数 for (int i = 0; i <5; i++) { Console.WriteLine("第{0}号选手的得票数为:{1}",i+1,star[i]); } //打印作废的票数 Console.WriteLine("作废的票数是:"+fei); }
相关文章推荐
- Android Studio的使用总结
- BundleCollection加载JS和CSS
- 看人家如何拿到腾讯阿里的offer
- IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- 按钮按下时有波纹动效 —— vision1.0
- leetcode——332——Reconstruct Itinerary
- 梯度检验与高级优化
- Java 枚举类
- iis7下的php实现urlrewrite,并隐藏index.php
- Android 编程下 Touch 事件的分发和消费机制
- AssetManager中的路径参数不能包含"assets/
- 【数据结构】线索化二叉树中序线索化的递归写法和非递归写法
- C语言中+的优先级大于>>
- Java 集合类
- C/C++复习:不等长字符串的排序(1)
- IOCTL函数用法
- android模拟小米天气view(下)
- 类、接口继承以及接口的实现
- 回顾自己的职业生涯的真正收获
- iOS 原生态分享功能的实现