冒泡法,顾名思义就是指气泡从水底向水面上冒,应用在排序上就表示一些数中最大数或者最小数到达最高位或者最低位,后面的数依次由大到小或由小到大排序,例如有一个数组a[10]={2,4,5,7,9,1,0,3,6,8},他们是杂乱无章的,现要将他们由大到小排序。
首先我们用a[0]和a[1]进行比较,显然a[0]<a[1],就让a[0]和a[1]的值进行互换,此时a[0]=4,a[1]=2,再让a[1]和a[2]进行比较,同理互换后,a[1]=5,a[2]=2,一直比较换值下去当a[4]=2时,用a[4]和a[5]进行比较,因为此时a[4]>a[5],就不用换值a[4]=2,a[5]=1,因为我们要把最小数放到最后,此时就用a[5]和a[6]比较,同理,再进行9次比较后,最小数0终于到了最后面,这是第一趟比较,第二趟依然由a[0]开始比较,总共比较8次后数字1到达倒数第二位,也就是说总共完成9趟比较后完成了从大到小的排序,如果用j表示比较的趟数,那么第j趟要比较10-j次。程序如下:
#include<stdio.h>
int main()
{
int i, j, t,a[10];
printf("请输入10个数\n");
for (i = 0; i < 10; i++)
scanf("%d", &a[i]); //向数组a[10]内输入想要排序的数字,即初始化
for (j = 1; j < 10;j++) //需要进行9趟比较
for (i = 0; i < 10 - j; i++) //每趟比较需要进行10-j次比较
{
if (a[i] < a[i + 1]) //a[i]<a[i+1]时,将二者的数值进行互换,反之不互换
{
t= a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
printf("由大到小排序后结果为\n");
for (i = 0; i < 10; i++) //将经过排序后的数字打印出来
printf("%d ", a[i]);
printf("\n");
return 0;
}