排序算法(三)——冒泡排序
2016-02-19 00:21
190 查看
排序
冒泡排序
主要思想: 对无序区从前向后依次将相邻记录进行比较,若反序则交换,从而使的小的记录向前移,大的记录向后移,直到没有反序。排序的具体过程:
(1)将整个待排序列划分成有序区和无序区,初始化时有序区为空,无序区包含所有序列(括号中的记录)。
(2)对无序区从前向后一次将相邻记录的关键码进行比较,若反序则交换,从而使得关键码小的记录像前移动,关键码大的记录向后移动(就像水中的气泡,体积大的先浮上来)。
(3)重复第二步,直到无序区中没有反序为止。
例如:
* 初始值为 [ 5, 69, 81, 12, 38, 53, 98]
* 第一趟: [ 5, 69, 12, 38, 53, 81] 98 // 括号内为无序区,括号后面为有序区
* 第二趟: [ 5, 12, 38, 53, 69] 81, 98
* 第三趟: [ 5, 12, 38, 53] 69, 81, 98
* 第四趟: [ 5, 12, 38] 53, 69, 81, 98
每趟从第一个数开始,依次与后面的数进行比较,若前面比后面的大,就交换直到进入有序区即停止。
/** * 交换排序: 冒泡排序 */ @Override public void bubbleSort(T[] t) { for(int i = 0; i < t.length; i++){ for(int j = 0; j < t.length - i -1; j++){ if(compare(t[j + 1], t[j])){ T tmp = t[j]; t[j] = t[j + 1]; t[j + 1] = tmp; } } } System.out.println("冒泡排序:"); print(t); }这里的compare 、 print 方法将在讲解完全部排序介绍,这里仍然才用泛型。
性能分析:冒泡排序的执行时间取决于排序的趟数。
(1)在最好情况下,待排序列为正序,算法只执行一趟,进行n-1次比较,不需要移动记录,时间复杂度为:O(N)。
(2)在最坏情况下,待排序列为反序,每趟在无序区中只有的第一个最大记录被交换到最终的位置,算法执行n-1趟,第i趟执行n-i 次比较和交换,所以时间复杂度为:O(N*N)。
(3) 平均情况下,冒泡排序的时间复杂度与最坏情况同数量级。所以冒泡排序的时间复杂度为:O(N*N)。
稳定性:若两个记录A和B值相等,但是排序后A、B的先后次序保持不变,则这种排序是稳定的,否则就是不稳定。
冒泡排序是一种稳定的排序算法。
总结:
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。它适合数据规模很小的时候,而且它的效率也比较低。但是学习排序算法还是值得学习的。
相关文章推荐
- 错误收集
- cin gets getline cin.get等输入的区别
- 使用Spinner实现下拉列表
- 循序渐进学java基础笔记(2)——JDK的安装和配置
- TLD学习(3)-最近邻分类器(NN)
- Android 的图片异步请求加三级缓存 ACE
- 关于 VBA 部分
- 2016/2/18 html 标签 表格
- c# word 操作
- UIApplication详细介绍
- Day20 实现TopN 排序
- 略论并行处理系统的日志设计
- C#如何释放已经加载的图片
- 初识Kotlin新的安卓编程语言
- 略论并行处理系统的日志设计
- Day19 实现二次排序
- 操作系统之任务管理(未完成)
- JAVA代理模式与动态代理模式
- PHP下使用强大的imagick轻松生成组合缩略图
- 自定义表单(完)--(html5版本)