冒泡排序也被称为起泡排序,该排序算法的原理就是经过一系列的交换实现的,也就是用第一个元素和第二个元素进行比较,如果第一个元素的值大于第二个元素则两者位置互换,否则不交换。然后第二个元素和第三个元素比较……最后序列中最大的元素被交换到了序列的尾部,这样就完成了一轮交换,经过n轮交换之后,就可以得到一个有序序列。
当然,除了从左向右交换的方案外,另外一种冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置"这一操作的算法,也就是从右往左交换。在这个过程中,数字会像泡泡一样,慢慢从右往左"浮"到序列的顶端,所以这个算法才被称为“冒泡排序”。
程序实现如下:
int *bubbleSort(int buf[],int bufsize)
{
int temp=0;//为了临时存储交换值
//只需要执行比较数组的大小-1次,
for(int n=1;n<bufsize;++n)
{
//每轮需要比较m次
for (int m = 0; m<bufsize-n; ++m)
{
//数组元素两两之间进行比较交换
if(buf[m]>buf[m+1])
{
temp =buf[m];//备份buf[m]
buf[m] =buf[m+1];//交换buf[m+1]与buf[m]的值
buf[m+1]=temp;
}
}
}
return buf;//返回数组的首地址
}
int main(void)
{
int buf[10]={12,25,11,5,56,32,14,66,23}; //定义一个无序的数组
int *p = bubbleSort(buf,sizeof(buf)/sizeof(buf[0]));//向冒泡函数中传递数组的首地址和数组的大小
for (int i = 0; i < sizeof(buf)/sizeof(buf[0]); i++)//输出显示排序后的数组
{
printf("%d\n",p[i]);
}
return 0;
}
运行结果:
评论区