回复 21楼 九转星河
你这个回答不对,if(a[j]>a[j+1])不是判断了多少次,而是执行了多少次,按照你的意思,如果if(a[j]<a[j+1])就不属于判断了吗?还有如果原始数据本来就是{1,2,3,4,5,6,7,8,9,10};就不用判断了吗?所以判断次数应该是
for(i=0;i<len-1;i++) 乘以for(j=0;j<len-i-1;j++)。乘出来的结果是多少,好象是90次。
#include <stdio.h> void sort(int *a,int len) { int i,j,t,z,count=0; for(i=0;i<len-1;i++) { int mask=1; for(j=0;j<len-i-1;j++) { if(a[j]>a[j+1]) { mask=0; t=a[j]; a[j]=a[j+1]; a[j+1]=t; printf(" 第 %3d 次交换: ",++count); for(z=0;z<10;z++) printf("%4d ",a[z]); printf("\n"); } } if(mask) break; } printf("共交换%4d 次",count); printf("\n"); } int main(int argc, char *argv[]) { int a[10]={10,9,8,7,6,5,4,3,2,1}; int i=0; //sort(a,10); printf("这段代码是用冒泡排序法来统计共交换了多少次。\n "); printf("交换前的数据: "); for(i=0;i<10;i++) printf(" %4d",a[i]); printf("\n"); sort(a,10); printf(" 交换后的数据: "); for(i=0;i<10;i++) printf("%4d ",a[i]); return 0; }