码迷,mamicode.com
首页 > 编程语言 > 详细

数组---冒泡排序

时间:2015-03-12 23:53:15      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

所谓数组,就是相同数据类型的元素按一定的顺序排列的集合,就是把有限个数据类型相同的变量用一个名字命名,然后用编号区分她们的变量的集合,这个名称就叫数组名,编号称为下标。

组成数组的各个变量称为数组的分量或元素。

数组中元素的索引是从0开始的,也就是a【0】,a【1】。。。。。。。

引用一下:冒泡排序

冒泡排序算法的运作如下:

  比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

  针对所有的元素重复以上的步骤,除了最后一个。

  持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

例子为从小到大排序,

原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |

 

第一趟排序(外循环)

第一次两两比较6 > 2交换(内循环)

交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |

交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |

 

第二次两两比较,6 > 4交换

交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |

交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |

 

第三次两两比较,6 > 1交换

交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |

交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |

 

第四次两两比较,6 > 5交换

交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

 

第五次两两比较,6 < 9不交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

 

第二趟排序(外循环)

第一次两两比较2 < 4不交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

 

第二次两两比较,4 > 1交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 | 
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

 

第三次两两比较,4 < 5不交换

交换前状态| 2 | 1 | 4 | 5 | 6 | 9 | 
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

 

第四次两两比较,5 < 6不交换

交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |

交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

 

第三趟排序(外循环)

第一次两两比较2 > 1交换

交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

 

第二次两两比较,2 < 4不交换

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

 

第三次两两比较,4 < 5不交换

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

 

第四趟排序(外循环)无交换

第五趟排序(外循环)无交换

 

排序完毕,输出最终结果1 2 4 5 6 9

举个例子:输入10个人的分数,去掉两个最高分,两个最低分,求平均数。

int temp = 0;
Console.WriteLine("请输入人数:");
int n = Convert.ToInt32(Console.ReadLine());
int[] a = new int[n];
if (n >= 5)
{


for (int i = 0; i < a.Length; i++)//length 下标是从1开始
{
Console.WriteLine("请输入第" + (i + 1) + "个人的成绩:");
a[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i < a.Length; i++)//冒泡,从小到大排列
{
for (int j = 0; j < a.Length - i - 1; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
int sum = 0;
double aver;
for (int i = 0; i < a.Length; i++)
{
sum += a[i];
}
aver = sum / n - 4;
Console.WriteLine("去掉的两个最低分:" + a[0] + "和" + a[1] +
",去掉的两个最高分:" + a[n - 2] + "和" + a[n - 1] + ";总成绩的平均分:" + aver);
}
else
{
Console.WriteLine("输入的人数要大于等于5!!");

}
Console.ReadLine();

技术分享

数组---冒泡排序

标签:

原文地址:http://www.cnblogs.com/likaixuan/p/4333973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!