java冒泡排序及原理
2013-09-19 22:10
363 查看
昨天去面试,HR问我关于算法和数据结构的问题,结果连个冒泡排序我都给写错了,特意回来研究了下原理,免得以后又忘了;
首先定义一个n个数据的数组array[];
然后根据冒泡排序的基本思想:
1.相邻的2个数相比较,按照从小到大的顺序将数据排列出来;
2.n个数据,那么就要依次排序,第一次是n-1次相邻数比较,第二次是n-2次相邻数比较,最多进行n-1趟排序,即可得到排序结果;
按照自己的理解,原理我也只能这样描述了;
还是写个代码来说明下更好
上面定义了一个数组,arr.length为5,不管arr.length为多少,j的长度为0,,1,2........arr.length-2;
说下排序的顺序:
第一趟排序比较了4次,数组的结果为:4,7,0,2,12;
第2趟比较了3次,数组的结果为:4,0,2,7,12
第3趟比较2次,数组的结果为:0,2,4,7,12;
因为已经没有要交换的值了,所以排序停止,根据上面的顺序,可以知道冒泡排序就是每一次比较都是把比较的n-2个数据中最大数放在n,n-1...1上。
基本的原理就这样了,不过该算法的执行效率并不高,根据它的时间复杂度:冒泡排序的最坏时间复杂度为O(n2)。
算法的平均时间复杂度为O(n2) 。冒泡排序最好的时间复杂度为O(n)。 来看,这里的执行效率显然不好。
好了,今天记录下来,以后不会再忘记了
首先定义一个n个数据的数组array[];
然后根据冒泡排序的基本思想:
1.相邻的2个数相比较,按照从小到大的顺序将数据排列出来;
2.n个数据,那么就要依次排序,第一次是n-1次相邻数比较,第二次是n-2次相邻数比较,最多进行n-1趟排序,即可得到排序结果;
按照自己的理解,原理我也只能这样描述了;
还是写个代码来说明下更好
public class PaiXu { public static void main(String[] args) { int[] arr = new int[] { 7, 4, 12, 0, 2}; int temp = 0; for (int i = 0; i < arr.length-1; i++) { System.out.println("i"+i); for (int j = 0; j < arr.length-i-1; j++) { System.out.println("j"+j); if(arr[j]>arr[j+1]){ temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for(int k=0;k<arr.length;k++){ System.out.print("arr:"+arr[k]+" "); } } }
上面定义了一个数组,arr.length为5,不管arr.length为多少,j的长度为0,,1,2........arr.length-2;
说下排序的顺序:
第一趟排序比较了4次,数组的结果为:4,7,0,2,12;
第2趟比较了3次,数组的结果为:4,0,2,7,12
第3趟比较2次,数组的结果为:0,2,4,7,12;
因为已经没有要交换的值了,所以排序停止,根据上面的顺序,可以知道冒泡排序就是每一次比较都是把比较的n-2个数据中最大数放在n,n-1...1上。
基本的原理就这样了,不过该算法的执行效率并不高,根据它的时间复杂度:冒泡排序的最坏时间复杂度为O(n2)。
算法的平均时间复杂度为O(n2) 。冒泡排序最好的时间复杂度为O(n)。 来看,这里的执行效率显然不好。
好了,今天记录下来,以后不会再忘记了
相关文章推荐
- 面向服务的分析与设计原理
- 磁盘阵列RAID5原理
- [Eclipse] Eclipse 的原理
- 动态分配资源的自动释放 – auto_ptr的实现原理
- 智能指针的实现及原理 + Good ! 句柄类
- H.264-AVC视频编码原理及实现(二)
- 编译原理学习笔记06——(连连看—准备一下很多课件都演示的公式E → E+T | T )——2014_1_22
- 双边滤波(BilateralFilter)原理
- deb包 建包原理
- Java内部类原理详解
- screen widget 框架页面生成原理初探
- 数据库系统原理及其应用总结---ShinePans
- DNS原理及其解析过程【精彩剖析】
- 浅析代码优化——编译器优化原理
- ZooKeeper原理及使用
- Linux-网桥原理分析 .
- TIME_WAIT状态原理
- 一个故事告诉你比特币的原理及运作机制
- mybatis入门基础(十一)-----分页查询(拦截器分页原理及实现)
- RocketMQ原理(3)——水平扩展及负载均衡详解