排序算法-冒泡排序
2016-04-25 11:54
239 查看
冒泡排序(bubble sort)
概念:
遍历多次数组(n个元素数组,最多遍历n-1次),在每次遍历中,连续对相邻的元素进行比较。如果某一对是降序,则交换他们的值;否则保持不变。
由于较小的值像“气泡”一样逐渐浮向顶部,而较大的值沉向底部,所以这种排序叫冒泡排序。
第一次遍历之后,最后一个元素就是数组的最大值
第二次遍历之后,倒数第二个元素是数组的第二大值
继续整个过程直到所有元素都已排序。
举例:
有6个元素(2,9,5,4,8,1),已经排好序的数字用下划线表示
第一遍
2 9 5 4 8 1 (2与9对比,<,不变)
2 5 9 4 8 1 (9与5对比,>,交换)
2 5 4 9 8 1
2 5 4 8 9 1
2 5 4 8 1 9
第二遍
2 5 4 8 1 9
2 4 5 8 1 9
2 4 5 8 1 9
2 4 5 1 8 9
第三遍
2 4 5 1 8 9
2 4 5 1 8 9
2 4 1 5 8 9
第四遍
2 4 1 5 8 9
2 1 4 5 8 9
第五遍
1 2 4 5 8 9
第一次遍历,最后一个元素成为最大值
第二次遍历,因为最后一个元素已确定是最大值,所以排序不用考虑最后一个
...
第i次遍历,排序不需要考虑最后i-1个元素
程序描述如下:
注意:如果在一次遍历中没有发生交换,说明所有元素已经排好序,那么就不必进行下一次遍历。所以程序可以改进为:
概念:
遍历多次数组(n个元素数组,最多遍历n-1次),在每次遍历中,连续对相邻的元素进行比较。如果某一对是降序,则交换他们的值;否则保持不变。
由于较小的值像“气泡”一样逐渐浮向顶部,而较大的值沉向底部,所以这种排序叫冒泡排序。
第一次遍历之后,最后一个元素就是数组的最大值
第二次遍历之后,倒数第二个元素是数组的第二大值
继续整个过程直到所有元素都已排序。
举例:
有6个元素(2,9,5,4,8,1),已经排好序的数字用下划线表示
第一遍
2 9 5 4 8 1 (2与9对比,<,不变)
2 5 9 4 8 1 (9与5对比,>,交换)
2 5 4 9 8 1
2 5 4 8 9 1
2 5 4 8 1 9
第二遍
2 5 4 8 1 9
2 4 5 8 1 9
2 4 5 8 1 9
2 4 5 1 8 9
第三遍
2 4 5 1 8 9
2 4 5 1 8 9
2 4 1 5 8 9
第四遍
2 4 1 5 8 9
2 1 4 5 8 9
第五遍
1 2 4 5 8 9
第一次遍历,最后一个元素成为最大值
第二次遍历,因为最后一个元素已确定是最大值,所以排序不用考虑最后一个
...
第i次遍历,排序不需要考虑最后i-1个元素
程序描述如下:
int temp; for(int i=0;i<list.length-1;i++) { for(int j=0;j<list.length-i-1;j++) { if(list[j]>list[j+1]) { temp=list[j]; list[j]=list[j+1]; list[j+1]=temp; } } }
注意:如果在一次遍历中没有发生交换,说明所有元素已经排好序,那么就不必进行下一次遍历。所以程序可以改进为:
boolean needNextPass=true; for(int i=0;i<list.length-1&&needNextPass;i++) { needNextPass=false; for(int j=0;j<list.length-i-1;j++) { if(list[j]>list[j+1]) { temp=list[j]; list[j]=list[j+1]; list[j+1]=temp; needNextPass=true; } } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树