输入10个数,用“起泡法”对10个数排序(由小到大)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入10个数,用“起泡法”对10个数排序(由小到大)。
“起泡法”算法:以六个数9、8、5、4、2、0为例。
第1趟比较(p83,图6.1)第2趟比较(p84,图6.2)
第1趟比较后,剩5个数未排好序;两两比较5次
第2趟比较后,剩4个数未排好序;两两比较4次
第3趟比较后,剩3个数未排好序;两两比较3次
第4趟比较后,剩2个数未排好序;两两比较2次
第5趟比较后,全部排好序;两两比较1次
算法结论:对于n个数的排序,需进行n-1趟比较,第j趟比较需进行n-j次两两比较。
程序流程图:(用两层嵌套循环实现)
程序:设需排序的数有10个,定义数组大小为11,使用a[1]~a[10]存放10个数,a[0]不用。main()
int a[11]; /* 用a[1]~a[10], a[0]不用*/
int i,j,t;/* i,j作循环变量,t作两两比较的临时变量*/
printf("input 10 numbers:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);/* 输入10个整数*/
printf("\n");
for(j=1;j<=9;j++) /* 第j趟比较*/
for(i=1;i<=10-j; i++) /* 第j趟中两两比较10-j次*/
if (a[i] > a[i+1]) /* 交换大小*/
{ t = a[i]; a[i] = a[i+1]; a[i+1] = t; }
printf("the sorted numbers:\n");
for(i=1;i<11;i++)
printf("%d",a[i]);
}