冒泡排序

我只是一个虾纸丫 提交于 2020-02-11 04:14:20

       冒泡排序(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         }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!