C语言-冒泡排序(图文解析)

欢迎来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;
    }
}

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值