当前位置:
文档之家› 冒泡法排序和选择法排序分析过程
冒泡法排序和选择法排序分析过程
i= 1,k的初值为i ,j :i+1~10 a[k] a[2] — a[k],a[3] — a[k], … … ,a[10] — a[k] a[i]
比较次数:8次, 每次比较 a[j]—a[k],其中,j :3~10,最后 交换a[2]和a[k]
第3趟排序:初始时k→3
i= 3,k的初值为i ,j :i+1~10 a[i] a[k] a[4] — a[k],a[5] — a[k], … … ,a[10] — a[k]
a[i]⇔a[i+1] 输出a[1] 到 a[10]
第 六 章 数 组
#include <stdio.h> void main() { int a[11],i,j,t; printf("Input 10 numbers:\n"); for(i=1;i<=10;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<=10;i++) printf("%d ",a[i]); }
第2趟 (i =2 ): 13
27 [38 65 j
第3趟 (i =3 ): 13 第4趟 (i =4 ): 13
第 六 章 数 组
27 27 27 27 27
[65 38 38 38 38
第5趟 (i =5 ): 13 第6趟 (i =6 ): 13 13
第1趟排序: 初始时k→1
高 级 语 言 比较次数:9次, 每次比较 a[j]—a[k],其中,j :2~10,最后 交换a[1]和a[k] 程 i= 2,k的初值为i ,j :i+1~10 序 第2趟排序:初始时k→2 设 a[i] a[k] 计 a[3] — a[k],a[4] — a[k], … … ,a[10] — a[k]
第 六 章 数 组
∷∷∷
第9趟排序: a[1] — a[2] j = 9, i :1~10-j
比较次数:1次,a[i]—a[i+1],i :1
高 级 语 言 程 序 设 计
输入10 个数给a[1] 到 a[10] for j=1 to 9 for i=1 to 10-j 真 a[i]>a[i+1]
高 级 语 言 程 序 设 计
例6-3. 用冒泡法对10个数排序
排序过程: (假设这10个数放在a[1] ~a[10]中) (1)比较第1个数与第2个数,若为逆序a[1]>a[2],则 ˋ 交换;然后比较第2个数与第3个数;依次类推,直 至第9个数和第 10个数比较为止——第一趟冒泡排 序,结果最大的数被安置在第10个位置上最后一个 元素位置),此过程须经过9次比较; (2)对前9个数进行第二趟冒泡排序,结果使次大的数ˋ 被安置在第9个元素位置,此过程须经过8次比较; (3)重复上述过程(上述排序过程须重复9次),直到 ˋˊ 排序完成。
比较次数:7次, 每次比较 a[j]—a[k],其中,j :4~10,最后 交换a[3]和a[k]
第 六 章 数 组
∷∷∷
第9趟排序: k→9 a[10] — a[k] i= 9,k的初值为i ,j :i+1~10 a[i] a[k]
比较次数:1次,比较 a[j]—a[k],其中,j:10 , 最后 交换a[9]和a[k]
第2趟排序:a[1] — a[2],a[2] — a[3], a[3] — a[4],a[4] — a[5] a[5] — a[6],a[6] — a[7], a[7] — a[8],a[8] — a[9] 比较次数:8次,a[i]—a[i+1],i :1~8 j = 2, i :1~10-j 第3趟排序:a[1] — a[2],a[2] — a[3], a[3] — a[4],a[4] — a[5] a[5] — a[6],a[6] — a[7],a[7] — a[8] 比较次数:7次,a[i]—a[i+1],i :1~7 j = 3, i :1~10-j
第 六 章 数 组
第1趟排序:a[1] — a[2],a[2] — a[3], a[3] — a[4],a[4] — a[5]
高 级 语 言 程 序 设 计
a[5] — a[6],a[6] — a[7],a[7] — a[8],a[8] — a[9],a[9] —a[10] 比较次数:9次,a[i]—a[i+1],i :1~9 j = 1, i :1~10-j
第 六 章 数 组
(3)重复上述过程,共经过9趟排序后,排序结束
高 级 语 言 程 序 设 计
k 第1趟 (i = 1): [ 49 13
k 38 j k 65 j 97 j 76 j
k 13 49 j 27 ] j k 97 j 97 [97 49 49 49 76 j 76 76 [76 65 65 49 j 49 49 97 [97 76 38 ] 27 j 38 ] 65 ] 65 ] 76 ] [97 ]
高 级 语 言 程 序 设 计
输入10个数给a[1] 到 a[10] for i=1 to 9 k=i for j =i+1 to 10 真 k=j i != k 真 a[i]⇔a[k] a[j]<a[k]
第 六 章 数 组
输出a[1] 到 a[10]
#include <stdio.h> void main() { int a[11],i,j,k,x; printf("Input 10 numbers:\n"); for(i=1;i<=10;i++) scanf("%d",&a[i]); printf("\n"); for(i=1;i<=9;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<=10;i++) printf("%d ",a[i]); }
高 级 语 言 程 序 设 计Fra bibliotek例6-4**. 用简单选择法对10个数排序 排序过程: (1)首先通过9次比较,从10个数中找出最小的, 将它与 ˋ 第1个数交换—第一趟选择排序,结果最小的数被安ˋ ˋˊ 置在第1个元素位置上 (2)再通过8次比较,从剩余的9个数中找出次小的数,将 ˋˊ 它与第2个数交换—第二趟选择排序