解析冒泡排序和阐述两种不同冒泡排序的区别
来源:互联网 发布:java中重写equals的类 编辑:程序博客网 时间:2024/05/21 20:36
今天在学习Javascript的时候有个demo用的是冒泡排序,仔细一看却觉得有的地方不太对。这好像和我用Java写的冒泡排序不太一样啊,看似相同的程序,输出的结果却相反。
于是花了点时间仔细研究了下,并复习了冒泡排序的思路,在这里用java 和大家分享下
/** * */package Sort;/** * @author fanjialiang24012017年9月18日 */public class Test {public static void main(String[] args) {int []s= {23,34,52,1,5};for (int i = 0; i < s.length; i++) {for (int j =0; j < s.length; j++) {if (s[i]>s[j]) {int temp=0;temp=s[i]; s[i]=s[j];s[j]=temp;}}for (int j2 = 0; j2 < s.length; j2++) {System.out.print(s[j2]+" ");}System.out.println();}}}
这是用Java写的第一种冒泡排序的过程和结果,可以看出思路还是很清晰的:
总共有两层循环,外层循环i从0开始,内层循环从i开始;从第一个数开始一次和后面的数进行比较,如果比后面的数大,就进行相互交换。一次遍历结束,最小的数会出现在最左边。然后从第二个数再开始,把第二小的数再找出来放在最左边。当外层循环结束,排序也就停止了。
按照上图的思路:
先是从1开始 这时候i=0,遍历了一遍没有比他更小的了,数组保持不变。
再从34开始 i=1,23比它小,和23交换,这时候数组变成了 1,23,52,34,5。需要注意的是:这时候的s[i]变 成了23,不再是34了。而且遍历仍在进行,23再和5进行比较。23>5它俩交换。这时候数组变成了上图的第二 行:1,5, 23, 52, 34。
接下来再从i=2开始,也就是23。23和本身比较,不变,再和34比较,不变,再和52比较,还是不变。遍历完成
接下来是34(i=3)。先和自身比较,不变,再和52比较,不变。遍历完成。
最后是52(i=4),和自身比较,不变。遍历全部结束,这样就排好序了。
接下来说说我今天下午遇到的另一种冒泡排序,大家乍眼一看是不是觉得算法和上图的内容是一模一样呢?结果却是截然相反。上面是从小到大排序,底下输出的结果是从大到小。只因为我改了一个字。把内层j的初始值改成了0。这样的一点微小的改变却影响了整个运行过程。下面我们来分析一下:
比较的思路还是一样的:s[i]和s[j]进行比较,如果s[i]比s[j]大,进行相互交换。
i=0时:s[i]小于其他任何数,不变
i=1时:s[i]和s[j]比较。注意:这时候的j=0;也就是s[i]要先和s[0]也就是1进行比较。34>1,交换 数组变成了:34,1,52,23,5这时候s[i]变成了1,1继续和其他数进行比较,不变
i=2时:s[2]也就是52开始比较,先和s[0]比较。52>34,交换。数组变成了 52,1,34,23,5。这时候s[2]变成了 34,34再和s[1]比较。34>1,交换。数组变成了:52,34,1,23,5。这时候再由1进行遍历,1小于任何数,遍 历完没有变化,数组变成了52,34,1,23,5
i=3时,s[i]为23。23进行遍历,23<52,23<34,不变。23>1,交换。数组变成了52,34,23,1,5再由1进行比较,不变。
i=4时。s[i]=5,5<前面的任何数除过1。进行交换,遍历全部完成。数组变成了52,34,23,5,1 即为最后结果
两种方法只差了一个数字。结果却截然相反。这就是程序的魅力。任何细小的差错都会导致可能截然相反的结果。正所谓:失之毫厘,谬以千里。
PS:因为自己经常在看一些算法时,觉得别人如果写的很详细理解起来就很容易。有些写的很模糊,甚至都不会想去看。所以自己在写的时候也是尽量的越详细越好。
- 解析冒泡排序和阐述两种不同冒泡排序的区别
- 两种冒泡排序
- 选择排序和冒泡排序的区别
- 选择排序和冒泡排序的区别
- 冒泡排序和插入排序的区别
- 选择排序和冒泡排序的区别
- 冒泡排序和交换排序的区别
- java排序的两种方法(数组排序)冒泡法和冒泡改进法
- 两种经典排序(冒泡排序和选择排序)
- 两种排序方法:冒泡排序和插入排序
- 简单冒泡排序的写法和两种优化
- 数组排序的两种算法--冒泡排序/选择排序
- 冒泡排序的两种形式
- 冒泡排序的两种写法
- 冒泡排序的两种改进
- 冒泡排序的两种写法
- 冒泡排序算法的两种优化
- 冒泡排序的两种写法
- 控件生命周期
- python里使用string.Template替换字符1
- 2017-9-18 【日记】关于区块链的一点理解与疑问
- PRX 设置IE浏览器代理
- 陈列专家可以在线自动升级啦
- 解析冒泡排序和阐述两种不同冒泡排序的区别
- terp 安装和使用
- Compute Shaders
- 练手项目
- js赋值取值问题
- 结构化方法与面向对象方法之比较
- 串(String)
- 【JSP】 include指令和include动作有什么区别?
- MOOC清华《面向对象程序设计》第8章:悬挂指针实验