清华大学出版社 TSINGHUA UNIVERSITY PRESS 运行结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 f语句用来控制换行,每行输出5个数据。 例7.3用起泡法对10个数排序(由小到大)。 起泡法的思路是:将相邻两个数比较,将小的调到 前头。见图7.1
运行结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 if语句用来控制换行,每行输出5个数据。 例7.3用起泡法对10个数排序(由小到大)。 起泡法的思路是:将相邻两个数比较,将小的调到 前头。见图7.1
清华大学出版社 TSINGHUA UNIVERSITY PRESS 9 8 8 8 8 5 5 5 5 4 2 2 2 2 0 0 0 9 第1次 第2次 第3次 第4次 第5次 结果 图7.1 5 5 5 5 4 4 4 2 2 2 2 0 0 0 0 0 ⑧ 第1次 第2次 第3次 第4次 结果 图7.2
图7.1 图7.2
清华大学出版社 TSINGHUA UNIVERSITY PRESS 若有6个数。第一次将8和9对调,第二次将第2和第3个数(9和 5)对调.如此共进行5次,得到854209的顺序, 可以看到:最大的数9已“沉底”,成为最下面一个数,而 小的数“上升”。最小的数0已向上“浮起”一个位置。经 第一趟(共5次)后,已得到最大的数。然后进行第二趟比较, 对余下的前面5个数按上法进行比较,见图7.2。经过4次比 较,得到次大的数8。如此进行下去。可以推知,对6个数 要比较5趟,才能使6个数按大小顺序排列。在第一趟中要 进行两个数之间的比较共5次,在第二趟中比4次.第5趟 比1次。如果有n个数,则要进行n-1趟比较。在第1趟比较 中要进行n-1次两两比较,在第i趟比较中要进行n-j次两两 比较。据此画出流程图(见图7.3)。根据流程图写出程序(今 设n=10),定义数组长度为11,本例中对a[0]不用,只用 a[1]到a[10],以符合人们的习惯
若有6个数。第一次将8和9对调,第二次将第2和第3个数(9和 5)对调.如此共进行5次,得到8 5 4 2 0 9的顺序, 可以看到:最大的数9已“沉底”,成为最下面一个数,而 小的数“上升”。最小的数0已向上“浮起”一个位置。经 第一趟(共5次)后,已得到最大的数。然后进行第二趟比较, 对余下的前面5个数按上法进行比较,见图7.2。经过4次比 较,得到次大的数8。如此进行下去。可以推知,对6个数 要比较5趟,才能使6个数按大小顺序排列。在第一趟中要 进行两个数之间的比较共5次,在第二趟中比4次.第5趟 比1次。如果有n个数,则要进行n-1趟比较。在第1趟比较 中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两 比较。据此画出流程图(见图7.3)。根据流程图写出程序(今 设n=10),定义数组长度为11,本例中对a[0]不用,只用 a[1]到a[10],以符合人们的习惯
清华大学出版社 TSINGHUA UNIVERSITY PRESS 输入n个数给a[1]到a[n for j=1 to n-l for i=1 to n-j a[i]>a[i+1] 真 很 a[i]→a[i+1] 输出a[1]到a[n] 图7.3
图7.3
清华大学出版社 TSINGHUA UNIVERSITY PRESS mainO { int a [11]; inti,j,t; printf("input 10 numbers n"); for (i=1;i<11;++) scanf("%d",&alil); printf("n"); forj=1;j<=9;j++) for(i=1;i<=10-j;i++) if(a[i门>a[it1])
main() { int a[11]; int 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])