冒泡排序及其改进算法
来源:互联网 发布:神机妙算软件定额安装 编辑:程序博客网 时间:2024/05/22 03:06
1、简单冒泡排序的思想就是像冒水泡一样,将最大的泡冒在数组最后,但是这里面有一个很大的问题:每次循环只是找最大的数,而其他数则原封不动,即数据的流动很慢,这样的话,效率自然会很低,因为排一次序,只做一件事:找最大的数,并把这个数复制到未排数组的最前面。
2、改进的冒泡排序呢,就是在原来简单冒泡排序的基础上,不再是只找最大的数,而是遇到比当前数据大的数,就放在当前的数后面,这样一次排序下来,即把较小的数局部前移,也让大的数据局部往数组的末尾走,这样的话,效率会有很大提升。
下面是代码块:
简单冒泡排序代码块:public class BubbleSort { public static void main(String[] args) { int[] s={4,1,3,2,9,7,5,6,8}; System.out.println("排序前的数组: "); for(int i=0;i<s.length;i++){ System.out.print(s[i]+" "); } System.out.println(); System.out.println("排序过程:"); Bubble1(s); //Bubble1()是简单冒泡排序 //Bubble2(s); //Bubble2()是改进的冒泡排序 System.out.println("排序后的数组: "); for(int i=0;i<s.length;i++){ System.out.print(s[i]+" "); } } //改进的冒泡排序,在原来冒泡排序的基础上,在第二层循环开始从后向前进行简单比较,实现局部有序,并且 //增加一个标识符flag用于判定是否需要继续排序,预防不必要的排序过程。 private static void Bubble2(int[] s) { boolean flag=true; for(int i=0;i<s.length&&flag;i++){ flag=false; for(int j=s.length-2;j>=i;j--){ if(s[j]>s[j+1]){ int a=s[j]; s[j]=s[j+1]; s[j+1]=a; flag=true; } } for(int k=0;k<s.length;k++){ System.out.print(s[k]+" "); } System.out.println(); } }//最简单原始的冒泡排序算法,但是效率也是最低的 private static void Bubble1(int[] s) { for(int i=0;i<s.length;i++){ for(int j=i+1;j<s.length;j++){ if(s[i]>s[j]){ int a=s[i]; s[i]=s[j]; s[j]=a; } } for(int k=0;k<s.length;k++){ System.out.print(s[k]+" "); } System.out.println(); } }}
简单冒泡排序的运行结果如下:
排序前的数组: 4 1 3 2 9 7 5 6 8 排序过程:1 4 3 2 9 7 5 6 8 1 2 4 3 9 7 5 6 8 1 2 3 4 9 7 5 6 8 1 2 3 4 9 7 5 6 8 1 2 3 4 5 9 7 6 8 1 2 3 4 5 6 9 7 8 1 2 3 4 5 6 7 9 8 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 排序后的数组: 1 2 3 4 5 6 7 8 9
执行Bubble2(s)的结果如下:
排序前的数组: 4 1 3 2 9 7 5 6 8 排序过程:1 4 2 3 5 9 7 6 8 1 2 4 3 5 6 9 7 8 1 2 3 4 5 6 7 9 8 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 排序后的数组: 1 2 3 4 5 6 7 8 9
对同一组数据进行排序,改进的算法,效果明显较优!
1 0
- 冒泡排序及其改进算法
- 冒泡排序及其改进算法
- 冒泡排序及其改进算法
- 冒泡排序及其改进算法
- 排序算法之冒泡排序及其改进
- 排序算法--选择+冒泡及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡算法及其改进
- 排序算法之五--冒泡排序及其改进
- 0032冒泡算法升序排序及其改进算法
- sysctl.conf学习和调优
- oracle两表关联更新
- 怎样做需求分析
- python dict转xml
- 使用springMVC的校验机制
- 冒泡排序及其改进算法
- 原生Notification
- LogMiner工具小结
- 前端随手优化不完全篇-SEO篇
- HDU
- linux 内核态调试函数BUG_ON()
- SparkSQL2.0扩展外部数据源原理
- 远程端口映射到本地端口
- spring security的ajax提交和json返回数据