冒泡排序基本思想:两两比较相邻数据,如果反序则交换数据,直到没有反序为止。
冒泡:较小的数(较大的数)如同气泡般慢慢浮到上面,因此命名冒泡排序,气泡排序。 还是代码看着直观,如下:
int a[]={2,1,3,4,5}; int n = sizeof(a)/sizeof(int); int i,j,temp; bool exchange=true; for(i=0;i<n && exchange;i++) { exchange=false; for(j=n-2;j>=i;j--)//a[0]顶时,较小的气泡上浮。 //for(j=0;j<n-1-i;j++) a[0]底时,较大的气泡上浮。 { if(a[j]>a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; exchange=true; } } }
补充说明:不一定要用双循环来完成算法,下面的代码更容易理解冒泡算法:
1 int a[]={2,1,3,4,5}; 2 int length= sizeof(a)/sizeof(int); 3 int n=length; 4 int i,j,temp; 5 bool exchange=true; 6 7 while(exchange) 8 { 9 exchange=false; 10 for(j=0;j<n-1;j++) 11 { 12 if(a[j]>a[j+1]) 13 { 14 swap(a[j],a[j+1]); 15 exchange=true; 16 } 17 } 18 n--; 19 } 20 21 22 for(int k=0; k<length; k++) 23 { 24 cout<<a[k]; 25 }
原文:http://www.cnblogs.com/supercell/p/3600666.html