冒泡算法改进--双向冒泡算法 Double Bubble
2011-11-13 23:10
253 查看
转载请表明出处http://blog.csdn.net/yming0221/article/details/6967047
双向冒泡算法比单向冒泡更适用于序列基本有序,但是有小元素在尾部,例如数列
1,2,3,4,5,6,7,8,9,0
如果使用单向冒泡算法,时间复杂度将是O(n^2)
改进的双向冒泡时间复杂度是O(n)
下面是双向冒泡算法的代码
该算法还能进一步改进,就是在数列的两端设置bound,用于记录最后一次交换的位置,这样可以进一步减少比较次数,进而减小时间复杂度。
双向冒泡算法比单向冒泡更适用于序列基本有序,但是有小元素在尾部,例如数列
1,2,3,4,5,6,7,8,9,0
如果使用单向冒泡算法,时间复杂度将是O(n^2)
改进的双向冒泡时间复杂度是O(n)
下面是双向冒泡算法的代码
/************************************************************************** * Problem: 双向冒泡算法 * Copyright 2011 by Yan * DATE: * E-Mail: yming0221@gmail.com ************************************************************************/ /* * R[]存放待排序数据,从0开始存放,共n个记录 */ #define bool _Bool #define true 1 #define false 0 void Double_Bubble(int R[],int n) { int i,j; int tmp; bool exchange=true; i=0; while(exchange) { exchange=false; for(j=i;j<n-i-1;j++)//向右扫描 { if(R[j]>R[j+1]) { exchange=true; tmp=R[j];R[j]=R[j+1];R[j+1]=tmp; } } for(j=n-i-1;j>i;j--)//向左扫描 { if(R[j]<R[j-1]) { exchange=true; tmp=R[j];R[j]=R[j-1];R[j-1]=tmp; } } i++;//每趟扫描结束都可以在两头确定一个元素的位置 } }
该算法还能进一步改进,就是在数列的两端设置bound,用于记录最后一次交换的位置,这样可以进一步减少比较次数,进而减小时间复杂度。
相关文章推荐
- 冒泡算法改进--双向冒泡算法 Double Bubble
- 常用算法总结之排序(三)----改进冒泡
- 双向冒泡算法 Double Bubble
- 鸡尾酒算法--冒泡算法的改进版
- Java排序算法以及算法改进总结(冒泡、选择、插入、归并、快速排序)
- 冒泡排序改进算法(双向起泡)
- 改进版的冒泡排序(双向冒泡算法)
- [算法设计与分析]3.3.2标志量的妙用(冒泡算法改进+三个数的最小公约数)
- 内部排序算法之二【改进的冒泡算法,鸡尾酒算法】
- 改进的模式匹配算法——KMP算法
- 算法不会,尚能饭否之双向循环链表
- 短文本关键词提取算法RAKE & TextRank及改进
- Google对TCP快速恢复算法的改进
- 冒泡算法的改进具体实现
- 内排序中3种复杂度为(n^2)的算法-----插入、冒泡、选择
- 【高效算法设计——双向扫描】 UVa 1442 Cave
- 改进的二值图像像素标记算法及程序实现