冒泡排序改进
来源:互联网 发布:雷欧奥特曼mac装备 编辑:程序博客网 时间:2024/05/21 22:43
平常写冒泡排序法时,都是直接两个for循环就搞定了,但这其实还是可以优化一下的,
可以在某一次遍历过程中,如果没有发现数据进行交换,则可以确定排序已经完成,这样
就可以跳出循环了。
代码如下:
/*Filename:bubleSort.cppAuthor: xiaobingE-mail: xiaobingzhang29@gmail.comDate: 2013-08-25*/#include<iostream>#include<string>#include<algorithm>#include<cstdlib>#define N 10using namespace std;/* 冒泡排序法 */void Bublesort(int a[],int n){ int i,j,k; for(j=0;j<n;j++) /* 气泡法要排序n次*/ { for(i=0;i<n-j-1;i++) /* 值比较大的元素沉下去后,只把剩下的元素中的最大值再沉下去就可以啦 */ { if(a[i]>a[i+1]) /* 把值比较大的元素沉到底 */ { k=a[i]; a[i]=a[i+1]; a[i+1]=k; } } }}void myBublesort(int a[], int n){int i,j,temp;int flag = 2; //表示是否一次遍历比较后没有变换,则可终止比较for(i=0;i < n;i++){for(j = i+1;j < n;j++){if(a[j-1] > a[j] ){temp = a[j];a[j] = a[j-1];a[j-1] = temp;flag = 0;//如果发生交换,则将flag置为0,表示还需要排序}}if(flag == 0){//这里是当有交换则重新对flag赋值,来记录下一次遍历比较flag = 2;} else if (flag == 2){//如果没有发生交换,说明已排好了flag = 1;}if(flag == 1){ //退出排序 break; }}}void print(int a[], int n){int i;for(i = 0;i < n;i++){cout<<a[i]<<" ";}cout<<endl;}int main(){int a[N] = {2,4,2,4l,34,4,3,535,65,54};int f[N] = {0,1,2,3,4,5,6,7,8,9};//Bublesort(a, 10);myBublesort(a,N);print(a, N);myBublesort(f,N);print(f, N); return 0;}
- 冒泡排序的改进
- 冒泡排序及其改进
- 冒泡排序的改进
- 冒泡排序改进-1
- 冒泡排序改进
- 冒泡排序改进版
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- 冒泡排序及其改进
- c++ 冒泡排序改进
- 冒泡排序的改进
- 改进版冒泡排序
- 冒泡排序的改进
- 冒泡排序--改进
- 冒泡排序改进版
- 改进的冒泡排序
- 冒泡排序改进版
- redis学习笔记九之虚拟内存
- C++为什么是C++而不是++C
- 关于自动化元素抽取
- Google App Engine 添加JSP文件后上传报JDK错误的解决办法
- HDU 1011
- 冒泡排序改进
- HDU 4616 Game (搜索)、(树形dp)
- 关于java执行顺序
- 二叉树镜像
- JAVA接口的应用及工厂模式的简单示例
- android中通过shape定制图形效果
- Python字符串处理(版本2.7)-学习笔记
- oracle临时表
- 有关函数。。。