冒泡排序法的详细过程。
程序代码:
#include <stdio.h> void sort(int *a,int len) { int i=0; int j; int t; int count=0; int z; for(i=0;i<len-1;i++) { for(j=0;j<len-i-1;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } printf("第%d次交换:",++count); for(z=0;z<10;z++) printf("%d ",a[z]); printf("\n"); } } int main(int argc, char *argv[]) { int a[10]={11,2,3,4,5,6,8,7,10,9}; int i=0; printf("交换前的数据: "); for(i=0;i<10;i++) printf(" %d",a[i]); printf("\n"); sort(a,10); printf("交换后的数据: "); for(i=0;i<10;i++) printf("%d ",a[i]); return 0; }
效果如图:
这里的数据11第一次交换不是直接一步到位就交换到最后位置的,而是先和2交换,然后和3交换,然后和4交换,然后和5交换,。。最后和9交换,这里一共交换了9步,可是代码却是1次交换就完成了。我现在想要的是这9步交换的每一步都输出来。
即:
2,11,3,4,5,6,8,7,10,9
2,3,11,4,5,6,8,7,10,9
2,3,4,11,5,6,8,7,10,9
2,3,4,5,11,6,8,7,10,9
2,3,4,5,6,11,8,7,10,9
2,3,4,5,6,8,11,7,10,9
2,3,4,5,6,8,7,11,10,9
2,3,4,5,6,8,7,10,11,9
2,3,4,5,6,8,7,10,9,11
.
.
.
.
.
.
直到2 3 4 5 6 7 8 9 10 11结束,并统计这样共交换了多少步?
还有就是如图的第二次交换到第九次交换是一样的,只要排序完成,就不用再做多余的工作了,第三到第九次交换就是多余的。