排序方法是C语言中一种重要的、基本的算法。一共有两种规律:升序和降序。升序是将数据从小到大排列,而降序是将数据从大到小排列。今天,我们来讲解排序方法中的冒泡排序法。我们知道,当烧开水时,烧开前气泡由大变小,烧开后,气泡由小变大。而我们的冒泡排序法也与之类似。
比如,有4个数字:{10、6、3、9},要求升序排列。
##第一轮
####第一步,将{10、6、3、9}中10与6进行比较,10>6,将10与6互换,得到{6、10、3、9}。10这个比6大的数向后移相当于气泡上升过程中变大。
####第二步,将{6、10、3、9}中10与3进行比较,10>3,将10与3互换,得到{6、3、10、9}。
####第三步,将{6、3、10、9}中的10与9进行比较,10>9,将10与9互换,得到{6、3、9、10}。
##第一轮结束,从{10、6、3、9}中找出最大值10。10在最后位置,不再变动。
##第二轮
####第一步,将{6、3、9}中的6与3比较,6>3,将6与3互换,得到{3、6、9}。
####第二步,将{6、3、9}中的6与9比较,6<9,将6与9不互换,得到{3、6、9}。
##第二轮结束,从{6、3、9}中找出最大值9。9在最后位置,不再变动。
##第三轮
####第一步,将{3、6}中3与6比较,3<6,将3与6不互换,得到{3、6}。
##第三轮结束,从{3、6}中找出最大值6。6在最后位置,不再变动。
从上面可以知道,4个数需要比较3轮,每轮次数递减。类比可知,n个数需要比较(n-1)轮,每轮次数递减。降序排序与上述过程相似,这里就不过多地赘述了。
下面用一个程序来说明。
##程序:
#include
int main()
{
int a[4];
int i,j,t;
printf("请输入4个整数:\n");
for (i=0;i<4;i++)
{
scanf("%d",&a[i]);
}
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("从小到大排列为:\n");
for(i=0;i<4;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
##结果:
冒泡排序法是排序法中的一个重要的分支,一定要重点掌握。