它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。(360百科)
在比较过程中,有两层循环。外层循环执行的次数为:元素的个数减1(每执行一次外层循环冒出一个“最大的”,确定了一个元素,行)。内层循环执行的次数:元素个数减1再减去执行次数(两两进行比较,比较完所有的元素后,就确定了一个元素,列)。
当没有元素交换的时候,就退出循环。通过设置标志位实现。
#include<stdio.h> void main() { int i,j,temp=1; int n=0,m=0;//分别记录外层循环和内层循环的次数 int flag=0;//标志位 int a[10]={1,0,3,2,4,5,6,7,8,9}; for(i=0;i<10;i++) printf("%2d",a[i]); printf("\n"); for(i=0;i<9;i++) { flag=0; for(j=0;j<10-1-i;j++) if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; flag=1; m++; } n++; if(!flag) break; } for(i=0;i<10;i++) printf("%2d",a[i]); printf("\n"); printf("外层循环次数%d,内层循环次数%d",n,m); }