数组---冒泡排序
2015-03-12 22:41
239 查看
所谓数组,就是相同数据类型的元素按一定的顺序排列的集合,就是把有限个数据类型相同的变量用一个名字命名,然后用编号区分她们的变量的集合,这个名称就叫数组名,编号称为下标。
组成数组的各个变量称为数组的分量或元素。
数组中元素的索引是从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
;
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();
组成数组的各个变量称为数组的分量或元素。
数组中元素的索引是从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
;
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();

相关文章推荐
- 数组的冒泡排序
- 实验报告->数组的定义和使用->冒泡排序和选择排序
- 数组的简单排序(冒泡排序,简单选择排序,插入排序)
- js数组冒泡排序
- 字符数组、冒泡排序
- 数组,冒泡排序
- 第十三周项目4-数组的排序(一)冒泡排序
- 数组,冒泡排序
- 整数数组的冒泡排序(从小到大)
- 冒泡排序(有一个数组 int[] array = {2,3,67,9,45}; 将其排列成9765432)
- 算法--数组的冒泡排序和选择排序
- C语言:冒泡排序算法对一个数组进行冒泡排序
- java 冒泡排序,数组排序算法 :冒泡排序
- 数组 获取最值(最大值 最小值)选择排序 冒泡排序 快速排序 半查找(二分查找) 十进制转其他进制法
- 生成10个20-50之间的随机数 冒泡排序 数组乱序
- 数组的应用:冒泡排序,折半查找及二维数组的应用
- 定义一个数组工具类!数组选择排序、冒泡排序、获取最大、最小值!
- c#连续输入整型数组(冒泡排序)
- (数组)冒泡排序
- 7 Java数组,冒泡排序