原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,
这样一趟过去后,最大或最小的数字被交换到了最后一位,
然后再从头开始进行两两比较交换,直到倒数第二位时结束。
从小到大排序:
原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |
第一趟排序(外循环)
第一次两两比较6 > 2交换(内循环)
交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |
交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |
第二次两两比较,6 > 4交换
交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |
交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |
第三次两两比较,6 > 1交换
交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |
交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |
第四次两两比较,6 > 5交换
交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第五次两两比较,6 < 9不交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第二趟排序(外循环)
第一次两两比较2 < 4不交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第二次两两比较,4 > 1交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第三次两两比较,4 < 5不交换
交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第四次两两比较,5 < 6不交换
交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第三趟排序(外循环)
第一次两两比较2 > 1交换
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第二次两两比较,2 < 4不交换
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第三次两两比较,4 < 5不交换
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第四趟排序(外循环)无交换
第五趟排序(外循环)无交换
排序完毕,输出最终结果1 2 4 5 6 9
冒泡排序的动画演示:
C语言代码:
1 #include <stdio.h> 2 int main() 3 { 4 int a[5]={5,4,3,2,1},i; 5 6 printf("原本的数字为:"); 7 for(i=0;i<5;i++) 8 { 9 printf("%d ",a[i]); 10 } 11 printf("\n"); 12 13 void bubble (int a[],int n); 14 bubble (a,5); 15 16 printf("冒泡法排序后:"); 17 for(i=0;i<5;i++) 18 { 19 printf("%d ",a[i]); 20 } 21 return 0; 22 } 23 24 void bubble (int a[],int n) 25 { 26 int i,j,temp; 27 for(i=0;i<n-1;i++) 28 { 29 for(j=i+1;j<n;j++) 30 { 31 if(a[i]>a[j]) 32 { 33 temp=a[i]; 34 a[i]=a[j]; 35 a[j]=temp; 36 } 37 } 38 } 39 }
引用来自:http://www.cnblogs.com/kkun/archive/2011/11/23/2260280.html
@chinazhoumin 表示,可以加一个变量记录是否交换,只要不发生交换就可以停止一轮循环
修改后:
1 void bubble (int a[],int n) 2 { 3 int i,j,temp,sign;//sign=1,未交换.sign=0,交换 4 for(i=0;i<n-1;i++) 5 { 6 for(j=i+1;j<n;j++) 7 { 8 sign=1; 9 if(a[i]>a[j]) 10 { 11 temp=a[i]; 12 a[i]=a[j]; 13 a[j]=temp; 14 sign=0; 15 } 16 if(sign==1) 17 { 18 break; 19 } 20 } 21 } 22 }
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>