java之冒泡排序
2016-05-03 17:35
411 查看
1 . 什么是冒泡排序?
网上查了点资料,也没有找到什么有用的概念,大致的意思都是 相邻的两个数两两做比较。根据相应的规则(比较大的往后放或比较小的往后放)放置两数的位置:
2 . 实战
假设有这样一个数组
冒泡排序是这样排的:
接着进行第二次比较:
与刚才类似:依然是拿第一个数“5”与其后的数做比较。由于数字1已确定为最小,所以不用比较。这样就只需要比较4次。
比完后是这样的:
依次类推:第3次比较比3次,结果是这样的
接着就是这样的:
数组 arr[] 的长度是6.
一共是比了5次,而每次比较中两两之比的次数又是递减的。
因此可以得出以下图示:
3 . 代码
这冒泡排序是不是就这样出来了?
最终冒泡排序的代码为:
补张图:
结束,收工。
网上查了点资料,也没有找到什么有用的概念,大致的意思都是 相邻的两个数两两做比较。根据相应的规则(比较大的往后放或比较小的往后放)放置两数的位置:
规则:大的数往后靠 比较前: 2,1 比较后: 1,2
2 . 实战
假设有这样一个数组
int arr[] ={ 2,5,1,4,3,6 }
冒泡排序是这样排的:
规则:小的往后靠 拿第一个数开始与其后面的做比较。 第一次比较: 2<5 true 所以 2 和 5 的位置变换 现在 arr是这样的 int arr[] = { 5,2,1,4,3,6 } 2<1 false 所以 2 和 1 的位置不变 int arr[] ={ 5,2,1,4,3,6 } 由于刚才的位置未放生变化,那就拿1与其后面的数继续比较 1<4 true 所以 1 和 4 的位置变换 现在 arr是这样的 int arr[] = { 5,2,4,1,3,6 } 1<3 true 所以 1 和 3 的位置变换 现在 arr是这样的 int arr[] ={ 5,2,4,3,1,6 } 1<6 true 所以 1 和 6 的位置变换 现在 arr是这样的 int arr[] ={ 5,2,4,3,6,1 } 一共是比较了5次。 这样第1次比较就完了,最终将最小值1确定到了最后1位,不需要再做比较。
接着进行第二次比较:
与刚才类似:依然是拿第一个数“5”与其后的数做比较。由于数字1已确定为最小,所以不用比较。这样就只需要比较4次。
比完后是这样的:
int arr[] ={ 5,4,3,6,2,1 }
依次类推:第3次比较比3次,结果是这样的
int arr[] ={ 5,4,6,3,2,1 }
接着就是这样的:
第4次比2次 int arr[] ={ 5,6,4,3,2,1 } 第5次比1次 int arr[] ={ 6,5,4,3,2,1 }
数组 arr[] 的长度是6.
一共是比了5次,而每次比较中两两之比的次数又是递减的。
因此可以得出以下图示:
外循环 | 内循环 |
---|---|
第1次比较 | 比了5次 |
第2次比较 | 比了4次 |
第3次比较 | 比了3次 |
第4次比较 | 比了2次 |
第5次比较 | 比了1次 |
这冒泡排序是不是就这样出来了?
就拿刚刚的数组为例子: 首先: 一共需要比较多少次: for(int i=0;i<arr.length-1;i++){} 一次比较里面两两相比需要多少次: for(int j =0;j<arr.length-1-i;j++){} 如果arr[j]上的值小于arr[j+1]上的值就变换位置 if(arr[j]<arr[j+1]){ int temp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=temp; }
最终冒泡排序的代码为:
for(int i=0;i<arr.length-1;i++){ for(int j=0;j<arr.length-1-i;j++){ if(arr[j]<arr[j+1]){ int temp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=temp; } } }
补张图:
结束,收工。
相关文章推荐
- java中的观察者模式
- Java数据类型——主要讲基本数据类型
- 修改Eclipse默认编码
- 理解Java类加载机制(译文)
- Struts2中动态方法的三种调用方式
- JAVA System.getProperty() 与 System.getenv() 差异及示例
- 简单描述java中的单例模式
- struts2访问三大域和参数
- Java Web:JSP+ Servlet+JavaBean+DAO
- 使用java.util.List.subList
- springmvc下的基于token的防重复提交
- 浅析Java中的访问权限控制
- Quartz使用-入门使用(java定时任务实现)
- MyBatis+springMVC+easyUI (dataGirl)实现分页
- 标识符、关键字和Java程序的基本规则
- spring mvc 搭建二 ,返回json格式
- java 链接数据库实现登录验证
- spring入门程序编写
- JAVA线程的interrupt
- spring cloud/mesos:在mesos上运行spring cloud config配置服务