欢迎来sober频道,本篇主要介绍算法冒泡排序,如有错误还请指出。感谢各位观众的支持,可以动动小手点个赞哇,如果你有更多想法可以在评论区留言喔。
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数组,一次比较两个元素,如果它们的值顺序错误就交换(按从小到大排序)。遍历的次数取决于数组长度,当走完数组长度的时候,就代表冒泡排序的结束。这个算法也像水中气泡一样一个个向上升,也叫气泡排序。
冒泡排序的关键是交换两个值,我们使用中间变量来交换两个值。
假设现在有a,b两个变量,我们通过中间变量tmp来交换这两个值。
a中存储的值为5,b中存储的值为3,然后将a的值赋值给tmp,把b的值赋值给a,tmp的值赋值给b
然后就完成了交换这个步骤
所以冒泡排序的核心就构成了,其中n是数组长度,a,b是两个值
for(size_t i = 1;i<n;i++)
{
int tmp = 0;
tmp = a;
a = b;
b = tmp;
}
将其扩展成函数就是
假设这里有个数组
num[5] = {5,4,3,2,1}
如果要将五冒泡到最后一个位置,按升序排序,则就需要进行4次的排序,那如果是四呢?因为五已经被我们排序到最后一个位置为最大的数字了,所以我们不需要将它和最后一个数字排序,也就只需要判断3次,以此类推,当我们有n个数据的时候,我们就需要按照从n-1到1的次数,也就是一个递减循环。
所以冒泡排序的格式为
那对该算法的优化也就添加一个变量判断是否交换,不交换就跳出循环,但其作用不大就是了。
最终成果如下:
void Swap(size_t *a,size_t *b)
{
size_t tmp = 0;
tmp = *a;
*a = *b;
*b = tmp;
}
void Bubble_sort(int* a, int n)
{
for (size_t end = n; end > 0; end--)
{
int flag = 0;
for (size_t i = 1; i < end; i++)
{
if (a[i - 1] > a[i])
{
Swap(&a[i - 1], &a[i]);
flag = 1;
}
}
if (flag == 0)
break;
}
}