冒泡排序是一种最为常用的排序方法。是一类具有“交换”性质的排序方法。其基本思想如下:
将序列中的第一个元素与第二个元素进行比较,若前者大于后者,则将第一个元素与第二个元素进行位置交换,否则不交换。
然后让第二个与第三个元素进行比较……
等等
直到将第n-1个元素与第n个元素进行比较为止。
例题:编写一个c程序,实现数据序列{1,5,6,3,2,8,4,9,7,0};的从小到大得排序,并且输出数列元素。
#include <stdio.h>
void bubblesort(int k[],int n)
{
int i,j,tmp,flag=1;
for(i=1;i<=n-1 && flag==1;i++)
{
flag=0;
for(j=0;j<n-i;j++)
{
if(k[j]>k[j+1])/*数据交换*/
{
tmp=k[j+1];
k[j+1]=k[j];
k[j]=tmp;
flag=1;
}
}
}
}
main()
{
int i,a[10]={1,5,6,3,2,8,4,9,7,0};
printf("原序列的元素的排列顺序:\n");
for(i=0;i<10;i++)
printf("%3d",a[i]);
bubblesort(a,10);
printf("\n冒泡排列好的顺序是:\n");
for(i=0;i<10;i++)
printf("%3d",a[i]);
getchar();
}
其运行结果如下:
程序设计好的地方:
1、在算法中设置了一个flag。规定当flag为1时,说明本次排序中有元素交换的动作,因此,还需要下一次的比较。当flag为0时,说明排序已经排好,只要比较就行了。
2、注意算法中用的是数组,故j的值应该从0开始。