排序算法（一）-----冒泡法冒泡法的本质就是相邻元素相互比较，比较大元素往上抛，正如气泡冒泡一下。故冒泡法得名。是交换法的一种。
/*该程序为最简单的冒泡法，不适用交换标志，使用两重循环，第一重循环我0~cn-1,第二重循环使用 i+1~ cn, 交换元素使用i个跟第j个元素交换，其时间复杂度为O（n^2/2)*/ #include<stdio.h> #define cnt 9 int b[cnt]={90,8,7,6,5,4,3,2,10}; void rearange(int b[],int k) { int i,j,qw=0; for(i=0;i<cnt-1;i++) for(j=i+1;j<cnt;j++) { if(b[i]>b[j]) { qw=b[i]; b[i]=b[j]; b[j]=qw; } } } void main(void) { int qw=0; //int i,j,qw=0,k=0; printf("原数据如下：\n"); while(qw<cnt) { printf("%d\t",b[qw]); qw++; } printf("\n"); printf("the new rank is that:\n"); /* for(i=0;i<cnt-1;i++) for(j=i+1;j<cnt;j++) { if(b[i]>b[j]) { qw=b[i]; b[i]=b[j]; b[j]=qw; printf("i=%d,j=%d\n",i,j); while(k<cnt) { printf("%d\t",b[k]); k++; } k=0; printf("\n") ; } }*/ qw=0; rearange(b,cnt); printf("重新排列后的数据如下：\n"); while(qw<cnt) { printf("%d\t",b[qw]); qw++; } printf("\n"); }



附冒泡方法二： a[j]和a[j+1]交换。 i为：0~n-1;j<0~n-1-i. void rechange2(int a[],int n) { int i,j; int temp; for (i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) { if(a[j]>a[j+1] { temp= a[j]; a[j]=a[j+1]; a[j+1]=temp; } } return; } 为了减少交换次数，如果第一轮交换都不存在交换的话，说排序完成，不需要完成两轮循环 void rechange3(int a[],int n) { int i,j; bool exchange ; int temp; for (i=0;i<n-1;i++) { exchange=fasle; for(j=0;j<n-i-1;j++) { if(a[j]>a[j+1] { temp= a[j]; a[j]=a[j+1]; a[j+1]=temp; } exchang=true; } if (!exchange) return; }