您的位置:首页 > 其它

基础算法之排序(1)--冒泡排序 改进

2014-03-23 21:29 288 查看
/**********************************************************************************************************         
* Function        : test         
* Create Date     : 2014/03/23        
* Author          : NTSK13         
* Email           : beijiwei@qq.com         
* Copyright       : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。         
                             任何单位和个人不经本人允许不得用于商业用途         
                             转载请注明 转自 http://blog.csdn.net/beijiwei         
* Version          : V0.1           
* date             : 2014/03/23       
* history          : V0.1            
***********************************************************************************************************         
          
算法基础之排序(1)--冒泡排序 改进(1)

基本思想: 对待排序的一组数据从前之后进行扫描,若发现相邻的两个数不同时,将这两个数进行交换.
		  升序和降序是同样道理. 

 假如待排序的一组数存于array
,则需要对数组进行N-1次扫描
 
 第1次扫描:  array[0]和array[1]对比交换,之后array[1]和array[2]对比交换...array[N-1] 和array
对比交换.
 第2次扫描: array[0]和array[1]对比交换,之后array[1]和array[2]对比交换...array[N-1] 和array
对比交换.
   .
   .
   .
 第N-1次扫描: array[0]和array[1]对比交换,之后array[1]和array[2]对比交换...array[N-1] 和array
对比交换.
 结束.

缺点:     如果N>>100很大,当在第3次扫描结束之后,发现数据已经按照要求排列好了, 则以后的操作就是浪费功夫.
		   
改进:     在一次扫描时,设一个标志位,若某次扫描结束,标志位没有置位,则退出

**********************************************************************************************************/                  
#include<stdio.h>                   
                                        
int main()                  
{                  
    int i=0,j=0,tmp=0,flag=0;
	int array[10]={1,2,0,3,4,5,6,7,8,9};    
      
    printf("Before sort, The element of array is: \n");    
  
    for(i=0;i<10;i++)  
    {  
        printf("%d \t",array[i]);     
    }  
/*********************************************************************************************************/  
    for(i=0;i<9;i++)  
    {
		flag=0;
		for(j=0;j<9;j++)  
		{  
			if(array[j]>array[j+1])  
			{  
				tmp=array[j];  
				array[j]=array[j+1];  
				array[j+1]=tmp;
				flag=1;
			}  
      
		}
		if(flag==0)
			break;	
	}
/*********************************************************************************************************/  
    printf("\n After sort, The element of array is: \n");    
    for(i=0;i<10;i++)  
    {  
        printf("%d \t",array[i]);     
    }  
    
    printf("\n");     
  
    return 0;    
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: