冒泡排序及优化

冒泡排序就是

比较相邻两个数大小,如果后面的比前面的小就交换位置,如果大就不做操作

这样进行下来一轮,只肯定能保证数组的最后一个数是整个数组中最大的

若有n个数充分n-1次就可以完成排序(最后第一个肯定是最小的)

接下来展示基础冒泡排序的c代码

int a[100];
for(int i=0;i<99;i++)//100个数字进行99次循环
{
    for(int j=0;j<99;j++)//一个个数比较把大数排到最后面(100个数比较99次即可)
    {
        int b;
        if(a[j]>a[j+1])
        {
        b=a[j];
        a[j+1]=a[j];
        a[j]=b;
        }
    }
}

但是内循环的j<99显然可以优化

因为第一次比较完,最后一个数就是数组中最大的数字了,没必要再去和数组中最大的数字再比一次,后面的确定的比前面的数全部的大的数由i决定

int a[100];
for(int i=0;i<99;i++)//100个数字进行99次循环
{
    for(int j=0;j<99-i;j++)//改进方法,去掉已经确定比前面都大的数字就可以了,也就是-i
    {
        int b;
        if(a[j]>a[j+1])
        {
        b=a[j];
        a[j+1]=a[j];
        a[j]=b;
        }
    }
}

如果是不确定数组

int a[N];
for(int i=0;i<N-1;i++)//N个数字进行N-1次循环
{
    for(int j=0;j<N-i-1;j++)//N个数字进行N-1次比较,并且把已经确定的最大数去掉
    {
        int b;
        if(a[j]>a[j+1])
        {
        b=a[j];
        a[j+1]=a[j];
        a[j]=b;
        }
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值