双向冒泡排序 和 单向冒泡排序 算法分析比较
来源:互联网 发布:淘宝定制手机壳的网店 编辑:程序博客网 时间:2024/05/17 09:41
假设单向冒泡排序也是 在如果没有交换发生的情况下则终止(即changeFlag==false的情况下).
以下是单向冒泡排序
1、最差情况:假设输入打下为n
1)单向排序
需要进行n次外循环,n次changeFlag=false;赋值和后面的比较判断,即2*n。每次外循环有n-i-1次内循环,(内循环总数为0+1+2+…+(n-1)=n*(n-1)/2次循环。每次内循环需要进行两次比较,三次赋值,(2+3)*n*(n-1)/2.
所以最差时间复杂度为2*n+5*n*(n-1)/2=5/2*n^2-n/2=o(n^2);
2)双向排序
//除去那些打印的附加信息,需要进行n/2上取整 次数的do--while循环,需要进行两次赋值和一次比较,比较内部还有一次赋值,即4*n/2,每次do-while内部需要一次for循环,每次for循环4次赋值和4次比较,而第一次for循环次数为0到n-2,第二次for循环(反向)次数为n-3到0,第三次for循环次数为1到n-3,第四次为n-4到2。所以为(n-1)+(n-2)+(n-3)+…+(1)=n*(n-1)/2.
所以总共:4*n/2+8*n*(n-1)/2=4*n^2-2*n=o(n^2)。但是如果去除
在最差情况下还不如 单向冒泡,但是都是o(n^2)的时间复杂度。
但是双向的优点在于每次能够记住最后一次交换的位置,而且两边都可以记住,也就是说假设10个数中, 只有少数几个数是乱的,假设1到10,2,3,4,5,1,10,6,7,8,9。单向排序需要5次(1到最前面需要4次+依次无交换检测)循环,使得最大的10,次大的9,……最小的1依次在各自位置。
双向需要3次(1到最前面一次,10到最后面1次,再加上一次无交换检测)。优点在于少量的打乱的情况下,双向能够记录当前的交换的位置,缩短循环的区间。
单向是:n-1,n-2,n-3….0
双向可以是:n-1,n-2(前两次),其他的可以是很小的区间pos[0]到pos[1],区间最大值等于单向,但是基本上都小于单向的。
- 双向冒泡排序 和 单向冒泡排序 算法分析比较
- 单向冒泡和双向冒泡排序算法
- 双向冒泡排序算法
- 双向冒泡排序算法
- 一般冒泡排序和双向冒泡排序
- java排序算法-比较快速排序,冒泡排序,双向冒泡排序的执行效率
- 排序--(单向)冒泡排序
- 【算法题】双向冒泡排序
- 冒泡排序算法分析!
- 冒泡排序算法分析
- 冒泡排序算法分析
- 算法分析:冒泡排序
- 排序算法系列:冒泡排序与双向冒泡排序
- 冒泡排序(排序算法--比较排序)
- 冒泡排序(单向)
- PHP实现冒泡排序、双向冒泡排序算法
- T-SQL单向冒泡排序算法
- 选择排序,冒泡排序,双向冒泡排序
- greenplum恢复standby
- 3D物体识趣及XNA实现原理
- 工作流jbpm4的学习笔记1
- js操作table 查找列中的值
- Java环境配置及学习资料
- 双向冒泡排序 和 单向冒泡排序 算法分析比较
- 使用CTabCtrl控件实现属性页功能
- 要了解详细信息,请使用-xlint:unchecked重新编译
- 矩阵搞来搞去
- Android中读取电话本Contacts联系人的所有电话号信息
- 积分怎么获得啊???
- MTK的语言与字库
- 1)最简单的小灯闪烁
- JSP动态输出Excel及中文乱码的解决