解题思路:
将相邻两个数比较,将小的调到前头。若有6个数(8,9,5,4,2,0)。第1次比较第1个数和第2个数(8和9)的大小,如果第1个数大于第2个数,就把两个数位置交换,第2次将第2个数和第3个数(9和5)进行比较和交换……如此共进行5次,得到8,5,4,2,0,9的顺序。可以看到,最大的数9已"沉底",成为最下面一个数,而小的数"上升"。最小的数0已向上"浮起"一个位置。经第1轮(共5次)后,已得到最大的数(在最下面)。
然后进行第2轮比较,对余下的前面5个数按上法进行比较。经过4次比较,得到次大的数8(在5个数中最下面的位置)。再进行第3轮比较,对余下的前面4个数进行比较……如此进行下去。不难看出,对6个数要比较(和交换)5轮,才能使6个数按大小顺序排列好。在第1轮中要对两个数之间的比较(和交换)进行5次,在第2轮中为4次……第5轮为1次。
可以推知,如果有n个数,则要进行(n-1)轮比较(和交换)。在第1轮中要进行(n-1)次两两比较,在第j轮中要进行(n-j)次两两比较。
根据以上思路写出程序,今设n=10,本例定义数组长度为11,a[0]不用,只用a[1]~a[10],以符合人们的习惯。从前面的叙述可知,应该进行9轮比较和交换。
编写程序:
运行结果: