冒泡算法(两两比较,最小上冒)
来源:互联网 发布:淘宝网多肉植物店铺 编辑:程序博客网 时间:2024/05/16 09:45
假设排序数组a[n],按从小到大排列
int a[] = {1,5,3,6,2,4,9,2,0};
int length = a.length;
准备好交换方法
private void swap(int j, int i) { int temp = a[j]; a[j] = a[i]; a[i] = temp;}
排序好后打印
for(int k = 0; k < length;k++){ Log.e("tag",a[k] +"");}
1.冒泡算法(两两比较,把小的往左移)
a[n] 和 a[n-1]比较,如果a[n-1] 大于 a[n] 则把a[n]和a[n-1]互换,这样a[n-1] < a[n]
接着再把a[n-1] 和a[n-2]比较。。。。。。。。。。。。。。。。a[n-2] < a[n-1]
。。。。。
最后把a[1]和a[0]比较。。。。。。。。。。。。。。。。。。。a[0] < a[1]
通过上述一轮比较,数组a最小的数被移到了最左边a[0]中,像泡泡冒到了最左边
以上是由a[n]到a[0]的比较,现在a[0]已排好
接下来进行a[n]到a[1]的比较,现在a[1]已排好
。。。。
最后a[n]到a[n-1]的比较,a[n-1]已排好
经过上述步骤,完成冒泡算法的排序
实现如下:
for(int i = 0; i < length;i++){ for(int j = length-1;j > i;j--){ if(a[j] < a[j-1]){ swap(j,j-1); } }}
经过a[n]到a[0]的第一次循环后,2和1交换,已全部排好序,后续的循环比较就没有必要了,所以我们设置一个标志位来进行控制:
boolean flag = true;for(int i = 0; i < length && flag;i++){ flag = false; for(int j = length-1;j > i;j--){ if(a[j] < a[j-1]){ swap(j,j-1); flag = true; } }}如果中途排序好了,就不会再进入a[j] < a[j-1] if分支,flag就为false值,将退出循环比较流程
算法评估:如果为最糟情况,数组刚好是从大到小排序的,用冒泡算法实现从小到大的排序
则比较交换次数是(n-1) + (n-2) + (n-3)+。。。。 + 1 = n(n +1)/2
时间复杂度为O(n^2)
0 0
- 冒泡算法(两两比较,最小上冒)
- 冒泡算法 相邻下标两两比较
- 冒泡排序--双层嵌套,两两比较
- 两种洗牌算法比较
- 冒泡排序算法的两种优化
- 冒泡排序算法及其两种优化
- 最小生成树-两种算法复杂度比较 poj-1258,2485
- 最小生成树的两种算法
- C++两种查询算法的比较
- 比较两字符串相似度算法
- 快速比较两字符串最大相同算法
- 两种平均算法的比较
- 两种快速排序算法比较
- 大数相乘的两种算法比较
- PAT 1007 两种算法比较
- HDU 6214 Smallest Minimum Cut (最小割最小割边)(两种算法的分析)
- 排序算法(一):冒泡算法的两种基本实现及改进
- php 冒泡排序(两种写法)
- 优化MYSCHOOL第七章存储过程 上机简答
- 将footer固定在页面底部的实现方法
- 第六章
- Jsp、Servlet基础
- Visual Studio 2015 开发环境
- 冒泡算法(两两比较,最小上冒)
- S2 优化MySchool 数据库设计 第七章 上机
- const成员函数
- 第七章
- mongoDB javaAPi 添加嵌套数组数据 更新
- 浏览器缓存机制(三)——cookie
- JAVA中获取当前系统时间
- IE8 springmvc支持文件上传
- Java之控制反转和依赖注入