1 /********************************************************************************************************** 2 * Function : test 3 * Create Date : 2014/03/23 4 * Author : NTSK13 5 * Email : beijiwei@qq.com 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。 7 任何单位和个人不经本人允许不得用于商业用途 8 转载请注明 转自 http://blog.csdn.net/beijiwei 9 * Version : V0.1 10 * date : 2014/03/23 11 * history : V0.1 12 *********************************************************************************************************** 13 14 算法基础之排序(1)--冒泡排序 改进 15 16 17 基本思想: 对待排序的一组数据从前之后进行扫描,若发现相邻的两个数不同时,将这两个数进行交换. 18 升序和降序是同样道理. 19 20 假如待排序的一组数存于array[N],则需要对数组进行N-1次扫描 21 22 第1次扫描: array[0]和array[1]对比交换,之后array[1]和array[2]对比交换...array[N-1] 和array[N]对比交换. 23 第2次扫描: array[0]和array[1]对比交换,之后array[1]和array[2]对比交换...array[N-1] 和array[N]对比交换. 24 . 25 . 26 . 27 第N-1次扫描: array[0]和array[1]对比交换,之后array[1]和array[2]对比交换...array[N-1] 和array[N]对比交换. 28 结束. 29 30 缺点: 如果N>>100很大,当在第3次扫描结束之后,发现数据已经按照要求排列好了, 则以后的操作就是浪费功夫. 31 32 改进: 在一次扫描时,设一个标志位,若某次扫描结束,标志位没有置位,则退出 33 34 35 **********************************************************************************************************/ 36 #include<stdio.h> 37 38 int main() 39 { 40 int i=0,j=0,tmp=0,flag=0; 41 int array[10]={1,2,0,3,4,5,6,7,8,9}; 42 43 printf("Before sort, The element of array is: "); 44 45 for(i=0;i<10;i++) 47 printf("%d ",array[i]); 49 /*********************************************************************************************************/ 50 for(i=0;i<9;i++) 51 { 52 flag=0; 53 for(j=0;j<9;j++) 54 { 55 if(array[j]>array[j+1]) 56 { 57 tmp=array[j]; 58 array[j]=array[j+1]; 59 array[j+1]=tmp; 60 flag=1; 61 } 62 63 } 64 if(flag==0) 65 break; 66 } 67 /*********************************************************************************************************/ 68 printf(" After sort, The element of array is: "); 69 for(i=0;i<10;i++) 71 printf("%d ",array[i]); 73 74 printf(" "); 75 76 return 0; 77 }