您的位置:首页 > 其它

冒泡排序

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。

举例:

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: