冒泡排序: 不断地把较大的数据移动到后面(比较),有写类似于水中的气泡向上冒的过程(越来越大)
算法分析
1、因为要对一个Int 类型的数组排序,所以解决问题的前提有条件是知道数组名及数组元素
也就是说函数应该有两个参数。
2、函数的功能是对数组排序,结束后并没有什么特定的值要返回给调用函数的地方,
所以函数的类型应该是void类型(如果需要记录交换次数,也可以把交换次数作为一个int 返回)
3、排序的过程时是经过若干趟完成的,且而每一趟都需要比较若干次,这样就构成了一个循环。
排序的若干趟循环次数为元素个数—1;每趟都是若干次比较,这也是一个循环,这样就构成一个循环嵌套。
4、比较都是前后两个元素而言的,如果前面元素用下标qian,后面元素下标hou比qian大1。
循环次数与第几趟有关
//冒泡排序——数组名做实参
#include<stdio.h>
void sort(int[],const int);
int main()
{
int elements[7]={5,18,9,6,4,7,45 };
sort(elements,7);
return 0;
}
//排序函数
void sort(int elements[],const int num )
{
int djt; //第几趟
for(djt=1;djt<num;djt++) //共num-1趟
{
int qian,hou;
for(qian=0;qian<num-djt;qian++)
{
hou=qian+1;
//比较前后元素大小,并将较大的放hou里,较小的放qian里
if(elements[qian]>elements[hou])
{
int tmp;
tmp=elements[qian];
elements[qian]=elements[hou];
elements[hou]=tmp;
}
}
}
//输出
int i;
printf("冒泡排序结果为:");
for(i=0;i<num;i++) //共num-1趟
printf("%d"" ",elements[i]) ; //这里不是elements,因为数组调用就是地址
}