冒泡排序(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。
举例:
1 static void Main(string[] args) 2 { 3 //冒泡排序,从小到大排列 4 int[] a = new int[10] { 9, 10, 5, 8, 7, 4, 3, 1, 6, 2 }; 5 6 for (int i = 0; i <a.Length; i++)//外层循环 7 { 8 for (int j = i; j <a.Length-1; j++)//内层循环 9 { 10 if (a[i]>a[j+1]) 11 { 12 int zhong=a[i]; 13 a[i] = a[j + 1]; 14 a[j + 1] = zhong; 15 } 16 } 17 } 18 for (int i = 0; i <a.Length; i++) 19 { 20 Console.WriteLine(a[i]); 21 } 22 }
青歌赛冒泡排序做法,青歌赛打分:20位评委给一个选手打分,去掉一个最高分,去掉一个最低分求歌手的平均得分。
1 static void Main(string[] args) 2 { 3 //青歌赛冒泡排序,青歌赛打分:20位评委给一个选手打分,去掉一个最高分,去掉一个最低分求歌手的平均得分。 4 5 //定义一个数组接收每一个评委的打分。 6 int[] fenshu = new int[20]; 7 8 for (int i = 0; i < 20; i++)//打分 9 { 10 Console.WriteLine("请{0}号评委给选手打分:", i + 1); 11 fenshu[i] = Convert.ToInt32(Console.ReadLine()); 12 13 } 14 for (int i = 0; i <fenshu.Length; i++) //冒泡排序,成绩从大到小依次排列 15 { 16 for (int j = i; j < fenshu.Length-1; j++) 17 { 18 19 if (fenshu[i]<fenshu[j+1]) 20 { 21 int zhong=fenshu[i]; // 定义中间值 22 fenshu[i] = fenshu[j + 1]; 23 fenshu[j + 1] = zhong; 24 } 25 } 26 27 } 28 Console.WriteLine("去掉一个最低分{0},去掉一个最高分{1}",fenshu[19],fenshu[0]);//最高分经过数组冒泡排序后存放在数组的第一个,最低分存放在数组的最后一个 29 30 double sum = 0; 31 for (int i = 1; i < 19; i++)//平均分是去掉最高分和最低分以后的18个分数的平均分 32 { 33 sum+=fenshu[i]; 34 35 } 36 double avg = sum / 18; 37 38 Console.WriteLine("歌手的平均分是:{0}",avg); 39 40 }
星光大道投票,用switch 完善,20个评委给5个选手投票,输出票数
1 static void Main(string[] args)// 2 { 3 //星光大道投票,用switch 完善,20个评委给5个选手投票,输出票数 4 5 //定义数组当做选手 6 int[] star = new int[5]{0,0,0,0,0}; 7 8 //定义数组存放20个评委的投票 9 int [] pingwei=new int[20]; 10 11 //接收20个投票 12 for (int i = 0; i < 20; i++) 13 { 14 Console.WriteLine("请第"+(i+1)+"位选手进行投票:(输入1-5代表支持的选手)"); 15 pingwei[i] = Convert.ToInt32(Console.ReadLine()); 16 } 17 18 //定义一个作废的票数来存放废票 19 int fei = 0; 20 21 //遍历20个票,给每一位选手加上票数,不是1-5的视为废票 22 for (int i = 0; i < 20; i++) 23 { 24 switch (pingwei[i]) 25 { 26 case 1: 27 star[0]++; 28 break; 29 case 2: 30 star[1]++; 31 break; 32 case 3: 33 star[2]++; 34 break; 35 case 4: 36 star[3]++; 37 break; 38 case 5: 39 star[4]++; 40 break; 41 default: 42 fei++; 43 break; 44 } 45 } 46 47 //遍历打印每位选手的票数 48 for (int i = 0; i <5; i++) 49 { 50 Console.WriteLine("第{0}号选手的得票数为:{1}",i+1,star[i]); 51 52 } 53 //打印作废的票数 54 Console.WriteLine("作废的票数是:"+fei); 55 }