输入10个数,用“起泡法”对10个数排序(由小到大)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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]);

}

相关文档
最新文档