排序篇(1)--冒泡排序
来源:互联网 发布:矩阵半张量积等式的解 编辑:程序博客网 时间:2024/04/30 07:59
一、冒泡排序算法
基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
二、冒泡排序代码实例
package Sort;/** * Created by LKL on 2017/2/28. */public class TestBubbleSort { public static void main(String[] args){ int[] adj ={9,1,5,8,3,7,4,6,2}; BubbleSort3(adj); for(int i:adj){ System.out.print(i); } } private static void BubbleSort1(int[] adj){ int i=0; int j=0; int temp=0; for(i=0;i<adj.length;i++){ for(j=i+1;j<adj.length;j++){ if(adj[i]>adj[j]){ temp=adj[i]; adj[i]=adj[j]; adj[j]=temp; } } } } //真正的冒泡排序,由下往上,一个个比较,当数据量达到十万级别,优势明显 private static void BubbleSort2(int[] adj){ int temp=0; for(int i=0;i<adj.length;i++){ for(int j=adj.length-2;j>=i;j--){ if(adj[j]>adj[j+1]){ temp=adj[j]; adj[j]=adj[j+1]; adj[j+1]=temp; } } } } //冒泡排序优化,应对一些特殊情况,比如说{2,1,3,4,5,6,7,8,9} private static void BubbleSort3(int[] adj){ int i=0; int j=0; int temp=0; boolean flag=true; for(i=0;i<adj.length && flag;i++){ flag=false; for(j=adj.length-2;j>=i;j--){ if(adj[j]>adj[j+1]){ temp=adj[j]; adj[j]=adj[j+1]; adj[j+1]=temp; flag=true; } } } }}
上述实例中有三种方式,下面单独分析:
第一种:
int[] adj ={9,2,3,4,1,7,8,5,6};int temp=0;for(int i=0;i<adj.length;i++){ for(int j=i+1;j<adj.length;j++){ if(adj[i]>adj[j]){ temp=adj[i]; adj[i]=adj[j]; adj[j]=temp; } }}//打印输出for(int i : adj){ System.out.print(i);}
此种算法有缺陷,效率较低,比如上述实例中,在排序好1和2的位置后,对其余关键字并没有什么帮助。
第二种:
int[] adj={9,2,3,4,1,7,8,5,6};int temp=0;for(int i=0;i<adj.length;i++){ for(int j=adj.length-2;j>=i;j--){ if(adj[j]>adj[j+1]){ temp=adj[j]; adj[j]=adj[j+1]; adj[j+1]=temp; } }}
冒泡排序优化,应对一些特殊情况,比如说{2,1,3,4,5,6,7,8,9}
第三种:
int[] adj={9,2,3,4,1,7,8,5,6};int temp=0;boolean flag=true;for(int i=0;i<adj.length&&flag;i++){ for(int j=adj.length-2;j>=i;j--){ if(adj[j]>adj[j+1]){ temp=adj[j]; adj[j]=adj[j+1]; adj[j+1]=temp; flag=true; } }}
以上三种情况,推荐使用第三种。
三、冒泡排序复杂度分析
最好的情况,需要排序的表本身就是有序的,则需要n-1比较,没有数据交换,此时的时间复杂度为O(n);
最坏的情况,待排序表是逆序的,此时需要比较1+2+3+4+…+(n-1)=n(n-1)/2,此时的时间复杂度为O(n^2)。
文章只是作为自己的学习笔记,借鉴了网上的许多案例,如果觉得阔以的话,希望多交流,在此谢过…
0 0
- 排序篇(1)--冒泡排序
- 排序1 冒泡排序
- 排序(1) -- 冒泡排序
- 排序1-冒泡排序
- 排序1-冒泡排序
- 排序1:冒泡排序
- 排序-1-冒泡排序
- 排序篇之冒泡排序
- [排序算法1] - 冒泡排序
- 排序(1)冒泡排序
- 排序算法(1)-冒泡排序
- 排序(1)-冒泡排序
- 排序算法1-冒泡排序
- 排序(1)冒泡排序
- 冒泡排序篇
- 冒泡排序java篇
- 冒泡排序1
- 冒泡排序改进-1
- Spring Security 自定义登陆页面报HTTP Status 403
- mongodb lock 出毛病时解决方法
- 一个ExtJs实例
- 管理后台的登录功能-重新思考
- jQuery-样式(jQuery的属性与样式)
- 排序篇(1)--冒泡排序
- 一些通过uv纹理坐标实现的简单shader(一)
- 浅尝树莓派3之串口配置
- 使用dwz框架导出当页数据
- 多行游标
- JVM调优总结
- 特殊方格取数
- JS无法取得display:none元素的宽高
- linux命令的理解