冒泡排序法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include <stdio.h> main() { int a[11],i,j,k,x; printf("Input 10 numbers:\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); for(i=1;i<10;i++) 假 k=i; { for(j=i+1;j<=10;j++) if(a[j]<a[k]) k=j; 假 if(i!=k) { x=a[i]; a[i]=a[k]; a[k]=x;} } printf("The sorted numbers:\n"); for(i=1;i<11;i++) printf("%d ",a[i]); }
k 例 i=1 初始: [ 49 13
k 38 j k 65 j 97 j 76 j
k 13 49 j k 97 j 97 [97 49 49 49 76 j 76 76 [76 65 65 49 38 ] 27 j 49 49 97 [97 76 j 38 ] 65 ] 65 ] 76 ] [97 ] 27 ] j
例 用简单选择法对10个数排序
排序过程: (1)首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数 交换—第一趟选择排序,结果最小的数被安置在第一个元素位置上 (2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录, 将它与第二个数交换—第二趟选择排序 (3)重复上述过程,共经过n-1趟排序后,排序结束

38 49 49 38 65 76 97 13 97 76 97 27 13 30 97 27 97 初 30 始 关 键 字 n=8
38 49 65 13 76 27 76 13 30 76 27 76 30 第 97 一 趟
38 49 13 65 27 65 13 30 65 27 65 30 76 第 二 趟
a[i]⇔a[i+1] 输出a[1] 到 a[n] 思考: 思考:如何将数组 脚标从1起始 起始? 脚标从 起始?
#include <stdio.h> main() { int a[11],i,j,t; printf("Input 10 numbers:\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); 假 for(j=1;j<=9;j++) for(i=1;i<=10-j;i++) 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]); }
38 13 49 49 27 13 49 30 27 49 30 65 第 三 趟
13 38 27 38 13 38 30 27 38 30 49
13 27 30 38
13 27 30
13 27
第 四 趟 五 趟
第 六 趟
第 七 趟

Ch6_3.c
输入n 个数给a[1] 到 a[n] for j=1 to n-1 for i=1 to n-j 真 a[i]>a[i+1]
例 用冒泡法对10个数排序
排序过程: (1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然 后比较第二个数与第三个数;依次类推,直至第n-1个数和第 n个数比较为止——第一趟冒泡排序,结果最大的数被安置在 最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在 第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束
i=2 一趟: 13
[38 65 27 j
二趟: 13 三趟: 13源自文库四趟: 13 五趟: 13 六趟: 13
27 27 27 27 27
[65 38 38 38 38
Ch5_201.c
C Source file
输入n 个数给a[1] 到 a[n] for i=1 to n-1 k=i for j=i+1 to n 真 k=j i != k 真 a[i]⇔a[k] 输出a[1] 到 a[n] a[j]<a[k]
相关文档
最新文档