zoukankan      html  css  js  c++  java
  • 冒泡排序改进

    平常写冒泡排序法时,都是直接两个for循环就搞定了,但这其实还是可以优化一下的,

    可以在某一次遍历过程中,如果没有发现数据进行交换,则可以确定排序已经完成,这样

    就可以跳出循环了。

    代码如下:

    /*
    	Filename:bubleSort.cpp
    	Author: xiaobing
    	E-mail: xiaobingzhang29@gmail.com
    	Date: 2013-08-25
    */
    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<cstdlib>
    #define N 10
    using 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;
    }


  • 相关阅读:
    JS中!=、==、!==、===的用法和区别
    Jquery判断Checkbox是否选中三种方法
    C# 信号量 学习
    redis学习资料
    Redis常用命令
    MySQL、HBase、ES的对比
    我对依赖注入,控制反转的理解
    net输出错误日志
    XmlExtensions帮助类
    DatetimeHelper类的编写
  • 原文地址:https://www.cnblogs.com/riskyer/p/3281281.html
Copyright © 2011-2022 走看看