8.5.2 冒泡法排序实例
冒泡法排序实例是计算机编程中的一个经典算法,实现多个数值的排序。方法是多次循环进行比较,将大数。每次循环时,找出剩余变量里的最大值,然后减小查询范围。这样经过多次循环以后,就完成了对这个数组的排序。这种排序的算法可用图8-1来表示。
冒泡法排序使用了反复循环和比较的算法,执行了下面这些步骤。
在第一次循环时,拿第1个数与第2个数进行比较,如果第1个数小于第2个数,就用一个中间变量使这两个数交换。这样就使第1个和第2个数从大到小排列。
|
|
图8-1 冒泡法排序的算法 |
再用第1个数与第3个数比较,使这两个数从大到小排列。用同样的方法,用第1个数与后面所有的数进行比较。
经过了第1轮循环比较以后,第1个数一定是所有数里面最大的数。
进行第2轮比较。这时让第2个数与后面所有的数比较,使用这个数是这些数里面的最大数。
用循环的方法,依次用后面的一个数与这个数后面的所有数进行比较,这样就完成了这些数的从大到小排序。
【范例8-11】用for循环语句实现冒泡法排序。下面的程序是使用冒泡法排序的例子。在这个程序中,需要注意两次循环比较。
实例代码8-11
- 01 #include <stdio.h>
- 02 int main()
- 03 {
- 04 int a[10]; /*定义一个整型数组。*/
- 05 int i,j,temp; /*定义循环变量和中间变量。*/
- 06 for(i=0;i<10;i++) /*进行循环输入变量。*/
- 07 {
- 08 printf("please enter a number:\n"); /*输出提示。*/
- 09 scanf("%d",&a[i]); /*输入变量赋值给数组变量。*/
- 10 }
- 11 for(i=0;i<10;i++) /*进行10次循环。*/
- 12 {
- 13 for(j=i+1;j<10;j++) /*循环比较剩余的变量。*/
- 14 {
- 15 if(a[i]<a[j]) /*如果前面一个数比后面数小,交换两个数的值。*/
- 16 {
- 17 temp=a[i];
- 18 a[i]=a[j];
- 19 a[j]=temp;
- 20 }
- 21 }
- 22 }
- 23 for(i=0;i<10;i++) /*循环输出排序以后的结果。*/
- 24 {
- 25 printf("%d ",a[i]);
- 26 }
- 27 return 0;
- 28 }
【执行结果】编译并运行这一个程序,根据程序的提示输入10个变量,程序会对这些变量进行排序,然后输出排序以后的变量。运行结果如下所示:- please enter a number:
- 9
- please enter a number:
- 10
- please enter a number:
- 3
- please enter a number:
- 4
- please enter a number:
- 8
- please enter a number:
- 6
- please enter a number:
- 0
- please enter a number:
- 1
- please enter a number:
- 7
- please enter a number:
- 6
- 0 1 3 4 6 6 7 8 9 10
【代码解析】
代码第11~22行使用冒泡法进行排序。读者需要仔细体会冒泡法排序的算法实现原理。
代码第23~26行打印排序后的结果。