黑马训练营—冒泡排序法的完整介绍
来源:互联网 发布:开源 学校网站 php 编辑:程序博客网 时间:2024/06/05 10:23
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
冒泡排序法的完整介绍
今天我学到排序方法,虽然只学习了一种排序方法,但是通过百度大神,还是知道好几种的排序方法,下面给大家介绍下冒泡排序的解释。
冒泡排序(冒泡排序将就的是数组中的元素两两比较)
实例:假设有一种极端的数组 {10,20,30,40,50}(这个数组6个元素,位置从0开始,第0位 是10,第1位 是20 … 第4位是50) 要给排序成{50,,40,30,20,10}的样式。
在上面的实例中,
第一趟:
第一次:就是第0位于第1位比较,如果第0位<第1位,则第0位于第1位
上的元素互换,此时,第0位的元素是20,第1位的元素是10,。
显示位置为:{20,10,30,40,50}.
第二次:因为第0位于第1位已经比较完成了,所以此时是第1位 于 第2位的元素比较,如果小于第2位的元素,则于第2位的元素互换。
显示位置为:{20,30,10,40,50}
第三次:同理可得,比较完成时。
显示结果为:{20,30,40,10,50}
第四次:同理可得,比较完成时。
显示结果为:{20,30,40,50,10}
此时,第一趟比较结束时,数组中的元素位置已经发生变化“{20,30,40,50,10}”,原来在第0位上的元素10 已经到了最后一位。但是我们只是把原来第0位的元素排到最后,所以我们还要进行第二趟的比较。
第二趟:
第一次:就是第0位于第1位比较,如果第0位<第1位,则第0位于第1位
上的元素互换,此时,第0位的元素是20,第1位的元素是30,。
显示位置为:{30,20,40,50,10}.
第二次:因为第0位于第1位已经比较完成了,所以此时是第1位 于 第2位的元素比较,如果小于第2位的元素,则于第2位的元素互换。
显示位置为:{30,40,20,50,10}
第三次:同理可得,比较完成时。
显示结果为:{30,40,50,20,10}
第四次:因为在第一趟就比较20 于10 的值,所以这里比较我们可以省略。
此时,第二趟比较结束时,数组中的元素位置已经发生变化“{30,40,50,20,10}”,原来在第一趟比较结束时,第0位上的元素20 已经到了倒数第二位。但是我只是把原来第0位的元素排到倒数第二位,所以我们还要进行第三趟的比较。
第三趟:
第一次:就是第0位于第1位比较,如果第0位<第1位,则第0位于第1位
上的元素互换,此时,第0位的元素是20,第1位的元素是30,。
显示位置为:{40,30,50,20,10}.
第二次:因为第0位于第1位已经比较完成了,所以此时是第1位 于 第2位的元素比较,如果小于第2位的元素,则于第2位的元素互换。
显示位置为:{40,50,30,20,10}
第三次:因为在第一趟就比较30 于20 的值,所以这里比较我们可以省略。
第四次:因为在第一趟就比较30 于10 的值,所以这里比较我们可以省略。
(实际上我们是有需要比较的,但是我们知道前面我们就比较过了,所以我们就省略了。)
此时,第三趟比较结束时,数组中的元素位置已经发生变化“{40,50,30,20,10}”,原来在第二趟比较结束时,第0位上的元素30 已经到了倒数第三位。但是我们只是把原来第0位的元素排到倒数第三位,所以我们还要进行第四趟的比较。
第四趟:
第一次:就是第0位于第1位比较,如果第0位<第1位,则第0位于第1位
上的元素互换,此时,第0位的元素是20,第1位的元素是30,。
显示位置为:{50,40,30,20,10}.
此时,第四趟比较结束时,数组中的元素位置已经发生变化“{50,40,30,20,10}”,原来在第三趟比较结束时,第0位上的元素40 已经到了倒数第四位。但是我们只是把原来第0位的元素排到倒数第四位,此时排序为{50,40,30,20,10} 已经达到我们要求的效果了!所以不用在排序了!
从上面的表述中我们看到一个规律数组中5个元素,比较了4趟,而且每趟的比较次数一次比一次少减少。用数字表达时:
第一趟:
第一次:20,10,30,40,50
第二次:20,30,10,40,50
第三次:20,30,40,10,50
第四次:20,30,40,50,10
第二趟:
第一次:30,20,40,50,10
第二次:30,40,20,50,10
第三次:30,40,50,20,10
第三趟:
第一次:40,30,50,20,10
第二次:40,50,30,20,10
第四趟:
第一次:50,40,30,20,10
有上述的排列来看,当数组中的元素 为 n 时,趟数 为 t ,那么就要比较t= n-1 趟,第t趟时为,n-t次,由此可见我们要排序时,要用到嵌套的for循环。
由此我写的C#代码为:
int[] scores = {10,20,30,40,50 };
for (int i = 0; i < scores.Length - 1;i++ ) 控制趟数的代码:
{
for (int j = 0; j < scores.Length - 1 - i; j++) 控制次数的代码
{
}
}
用此处的 i 来控制数组中趟数循环,当 i =0 时,循环为第一趟,当i =1时,循环第二趟,所以得出趟数 为i + 1趟。
假设,(依据上面那个实例)
当i =0 时,为趟数:为i + 1趟,也就是:第一趟。数组中有5个元素,所以第一趟要循环4次。
当i =1 时,为趟数:为i + 1趟,也就是:第二趟。数组中有5个元素,所以第二趟要循环3次。
所以我们能得出一个规律,当i =0 时,为趟数:为i + 1趟,次数:为5-(i + 1)次,i =0,所以次数为:4;满足上面的规律。
所以元素为n时,趟数为:n-1趟,每趟次数为:n-i-1次。
所以就有了上面的for的嵌套循环。
在里面那个for循环 的交换公式为:
if (scores[j] > scores[j + 1])//如果从小到大输出,就用">"号,从大到小输出,用"<"号
{
int temp = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = temp;
}
答应输出的代码为:(不在for循环里打印输出)
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine(scores[i]);
}
下面给大家发完整的代码:
//数组中,排序为 n个元素要排n-1趟
// 第t趟比较的次数为n-t次
int[] scores = { 18, 28, 94, 51, 60, 84, 48, 51 };
for (int i = 0; i < scores.Length - 1; i++)
//控制比较的趟数,循环次表示表示比较了一次
{
for (int j = 0; j < scores.Length - 1 - i; j++)
//次数的比较,当第i趟时,元素长度n-i-1 次
{
if (scores[j] > scores[j + 1])
//如果从小到大输出,就用">"号,从大到小输出,用"<"号
{
int temp = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = temp;
}
}
}
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine(scores[i]);
}
当然在C#排序中,冒泡排序不是最快的排序方法,如果有机会我将继续给大家介绍C#的排序方法。
如:
ü 选择排序
ü 插入排序
ü 快速排序
以上就是冒泡排序法的全部解释,如果有谁不理解的,可一个给我留言,转载请注明出处。
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://net.itheima.com/
- 黑马训练营—冒泡排序法的完整介绍
- 黑马程序员--冒泡排序法
- 完整的冒泡排序实现以及原理
- 整数算法训练及冒泡排序法
- 黑马训练营-方法和参数的介绍
- 黑马程序员关于数组、冒泡排序法的复习笔记
- 黑马程序员——C语言的冒泡排序
- 黑马程序员——C语言的冒泡排序
- 介绍4个常用的排序法。冒泡排序、插入排序、快速排序、选择排序法
- 黑马程序员—内外层循环以及冒泡排序法
- 八大排序算法及完整c代码—冒泡排序
- 黑马程序员——浅谈冒泡排序
- 黑马程序员——冒泡排序
- 黑马程序员-冒泡排序
- 黑马程序员-冒泡排序
- 黑马程序员--冒泡排序
- c和c++的一些训练题(1)(冒泡法排序运动员成绩)
- p180冒泡排序的完整程序及输出结果
- 让css动起来—-lesscss
- ZOJ Monthly, February 2012 - H Matrix (ZOJ 3578)
- MFC TRACE宏的使用
- 还有那个bspider不知道哪里的飞鸽传书
- java对象转JSON
- 黑马训练营—冒泡排序法的完整介绍
- 用枚举方法 在case 语句中使用字符
- javax.el.PropertyNotFoundException: Property 'key' not found on type java.lang.String
- Subclass QSortFilterProxyModel
- 下采购订单-总结purcurement for consumption material
- 一个可变的C++字符序列是5 0新增的
- ASP.NET中的回调技术
- DataTable 行转列
- windows神器 - mimikatz