冒泡排序
数据结构
冒泡排序
1.冒泡算法思想:
冒泡排序也被称为起泡排序,该排序算法的原理就是经过一系列的*交换*实现的,也就是用第一个元素和第二个元素进行比较,如果第一个元素的值大于第二个元素则两者位置互换,否则不交换。然后第二个元素和第三个元素比较.......最后序列中最大的元素被交换到了序列的尾部,这样就完成了一轮交换,经过n轮交换之后,就可以得到一个有序序列。
当然,除了从左向右交换的方案外,另外一种冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”这一操作的算法,也就是从右往左交换。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的顶端,所以这个算法才被称为“冒泡排序”。
2.冒泡算法代码:
/*****************************************************************************************************************
*
* file name : BubbleSort.c
* author : cnzycwp@126.com
* data : 2024/05/06
* function : 冒泡算法
* note : None
*
* CopyRight (c) 2024 cnzycwp@126.com All Right Reseverd
*
* ****************************************************************************************************************/
#include<stdio.h>
/*****************************************************************************************************************
*
* func name : BubbleSort
* function : 冒泡排序:交换类排序,比较一轮,选出最大或最小值
* argument :
* @temp :临时储存交换值
* retval : void
* note : None
* author : cnzycwp@126.com
* data : 2024/05/06
*
*
* ****************************************************************************************************************/
void BubbleSort(int buf[],int bufsize)
{
//为了临时储存交换值
int temp = 0;
//1.循环比较元素,需要比较n轮
for (int n = 1; n < bufsize; n++)
{
//2.每轮需要比较m次
for (int m = 0; m < bufsize-n; m++)
{
//3.数组元素两两之间进行比较交换
if (buf[m] > buf[m+1])
{
temp = buf[m]; //备份前一个
buf[m] = buf[m+1]; //把后面交换到前面
buf[m+1] = temp; //把前面交换到后面
}
}
}
}
int main()
{
int buf[10] = {5,6,4,25,85,32,1,56,8,10};
printf("冒泡前的数组buf为:\n");
for (int i = 0; i < 10; i++)
{
printf("%d->",buf[i]);
}
printf("\n");
BubbleSort(buf,10);
printf("冒泡后的数组buf为:\n");
for (int i = 0; i < 10; i++)
{
printf("%d->",buf[i]);
}
printf("\n");
return 0;
}
3.冒泡算法验证: