[5] 算法之路 - 冒泡排序
2014-08-20 23:54
218 查看
气泡排序法 –
算法
顾名思义,就是排序时
最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法,将大的元素交换至右端
所以大的元素会不断的往右移动,直到适当的位置为止。
基本的气泡排序法可以利用旗标的方式稍微减少一些比较的时间,当寻访完阵列后都没有发生任何的交换动作,表示排序已经完成,而无需再进行之后的回圈比较与交换动作,例如:
排序前:95 27 90 49 80 58 6 9 18 50
27 90 49 80 58 6 918 50 [95] 95浮出
27 49 80 58 6 9 1850 [90 95] 90浮出
27 49 58 6 9 18 50[80 90 95] 80浮出
27 49 6 9 18 50 [5880 90 95] ......
27 6 9 18 49 [50 5880 90 95] ......
6 9 18 27 [49 50 5880 90 95] ......
6 9 18 [27 49 50 5880 90 95] 由于接下来不会再发生交换动作,排序提早结束
在上面的例子当中,还加入了一个观念,就是当进行至i与i+1时没有交换的动作,表示接下来的i+2至n已经排序完毕,这也增进了气泡排序的效率。
SourceCodes
算法
顾名思义,就是排序时
最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法,将大的元素交换至右端
所以大的元素会不断的往右移动,直到适当的位置为止。
基本的气泡排序法可以利用旗标的方式稍微减少一些比较的时间,当寻访完阵列后都没有发生任何的交换动作,表示排序已经完成,而无需再进行之后的回圈比较与交换动作,例如:
排序前:95 27 90 49 80 58 6 9 18 50
27 90 49 80 58 6 918 50 [95] 95浮出
27 49 80 58 6 9 1850 [90 95] 90浮出
27 49 58 6 9 18 50[80 90 95] 80浮出
27 49 6 9 18 50 [5880 90 95] ......
27 6 9 18 49 [50 5880 90 95] ......
6 9 18 27 [49 50 5880 90 95] ......
6 9 18 [27 49 50 5880 90 95] 由于接下来不会再发生交换动作,排序提早结束
在上面的例子当中,还加入了一个观念,就是当进行至i与i+1时没有交换的动作,表示接下来的i+2至n已经排序完毕,这也增进了气泡排序的效率。
SourceCodes
// 冒泡排序 int BubbleSort(int a[],int lens) { int i,j; for(i=0;i<lens-1;i++) { for(j=0;j<lens-1-i;j++) { if(a[j]>a[j+1]) { SWAPER(a[j],a[j+1]); } } } return 0; } int BubbleSort2(int a[],int lens) { int i,j; bool flag=true; for(i=0;i<lens-1 && flag==true;i++) { flag=false; for(j=0;j<lens-1-i;j++) { if(a[j]>a[j+1]) { SWAPER(a[j],a[j+1]); flag=true; } } } return 0; }
相关文章推荐
- 【转】学习算法之路
- 常用排序算法之一:三种常用的冒泡排序的改进算法。
- 冒泡排序----算法排序
- 白话经典算法系列之一 冒泡排序的三种实现
- [php]数据结构&算法(PHP描述) 冒泡排序 bubble sort
- 【记录算法题之路】数组最大和
- C 字节对齐.我的算法学习之路
- 项目一-验证算法-希尔排序,冒泡排序
- linux学习之路之加密类型及其相关算法
- 白话经典算法系列之一 冒泡排序的三种实现
- [算法学习笔记]冒泡排序和选择排序
- 基于比较的算法之一:冒泡排序
- 第十五周项目一 - 验证算法之直接插入、希尔、冒泡排序
- iOS算法总结-冒泡排序
- 基础算法之冒泡排序(bubble sort)
- 冒泡排序原理以及算法
- 算法---冒泡排序
- C++之路进阶——优先队列优化最短路径算法(dijkstra)
- 第十五周 排序 项目一 验证算法(1)冒泡排序
- 基础之路01,选择排序不就是跳了中间交换步骤的冒泡排序嘛