可能是屎上最容易懂的java冒泡排序
2016-06-03 23:25
330 查看
冒泡排序是一门艺术,一般人刚刚接触到他的时候,根本无从下手。不少人(包括我)大学毕业了找工作,面试官问:你解释一下冒泡算法,直接就歇菜了。
首先我们从字面上来看,冒泡,像泡泡一样冒出来,还是不懂啊。不看代码,我还真讲不通,我先把代码搞上来,咱们对着代码讲。
public static void main(String[] args) { int[] array={4,3,2,1}; int count=0; for(int i=0;i<array.length;i++){ //外循环 for(int j=i+1;j<array.length;j++){ //内循环 count++; if(array[i]>array[j]){ int first=i; //下面三行代码:first位置的数和j位置的数换个位置 int temp=array[first]; array[first]=array[j]; array[j]=temp; printArray(i,j,array); //打印数组 } } } System.out.println("一共执行了:"+count+"次!!"); } private static void printArray(int i,int j,int[] array){ System.out.print("i="+i+",j="+j+",array="); for(int k:array){ System.out.print(k+" "); } System.out.println(); }
执行的结果:
i=0,j=1,array=3 4 2 1 i=0,j=2,array=2 4 3 1 i=0,j=3,array=1 4 3 2 i=1,j=2,array=1 3 4 2 i=1,j=3,array=1 2 4 3 i=2,j=3,array=1 2 3 4 一共执行了:6次!!
我草,这不一目了然了?我们看运行的结果:
1、看前面三行,i的值是0,j的值从1涨到3,我们成功得将数组变成了:1 4 3 2,也就是说,里边的for循环走一遍,就把最小的数给搞到前面啦!
2、再看第4、5行,i的值是1,j从2到3,我们的数组变成了:1 2 4 3,意思是:我们把第二小的数放到了第二位!
3、当执行到最后一次的时候,我们把第三小的数放到了第三位。
总结一下:冒泡算法就是2个for循环,对于外循环,第几次外循环就能把数组第几小的数放到第几位,所以一共要进行n-1次的外循环才能将数组排序。 对于内循环,每次都把当前的第一个数(array[i]) 和后面的每一个数(array[j]) 比较,谁小谁就放在第一个!
于是,我们得到的结论是:冒泡算法是这样的:包括2个循环,内循环将最小值放前面(内有交互值方法),外循环就是(for i=0;i<length;i++)
你们还有更好的解释吗?求留言赐教,谢谢大家····
相关文章推荐
- 这可能是最容易读懂的区块链知识了
- 这可能是新手最容易入门的JVM讲解(不过是一场恋爱)
- 卡巴8.0下,读文件失败的可能原因
- ActiveX控件在编译的时候卡住,可能的解决方法
- 补全aaz288 可能有问题的过程 P_COMPL_AAZ288
- java冒泡排序和快速排序
- [转] "计算机无法访问,您可能没有权限使用网络资源.请与这台服务器的管理员联系以查明您是否有访问权限" 解决方法
- Palindrome Partitioning 回文串分割,求所有可能的分割
- {"集合已修改;可能无法执行枚举操作。"}
- 规范化中的 JSR 299 与可能到来的 JSR 330
- 给Eclipse安装eUML2插件以及可能出…
- java中通过JDK工具手动压缩JAR包时package路径必须严格对应,否则可能压缩JAR包成功,但执行不了
- 关于Google你可能不知道的10件事
- 肺经--人体最容易受伤害的经 (转载)
- HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法
- 当你成了警察之后,这可能就是你的一天
- 卓越郭朝晖:垂直类B2C网站可能昙花一现
- stl可能使迭代器失效的操作
- Portal for ArcGIS发布SPK三维场景可能遇到的问题---持续更新
- 批处理(有得可能是不能用,还有得是破坏自己电脑,请大家自己了解)看了别人得和大家分享