排序算法之冒泡排序(从小到大)C语言

冒泡排序的思想:通过相邻两个数进行比较,第一趟冒泡排序将最小的数移到第一位,经过第n-1趟冒泡排序就可以将n个数字从小到大排序。

// 9 8 7 6 5 4 3 2 1 0    10个数需要进行9次排序
// 0 9 8 7 6 5 4 3 2 1    第一趟冒泡排序之后
// 0 1 9 8 7 6 5 4 3 2    第二趟冒泡排序之后
// 0 1 2 9 8 7 6 5 4 3    第三趟冒泡排序之后
// 0 1 2 3 9 8 7 6 5 4    第四趟冒泡排序之后
// 0 1 2 3 4 9 8 7 6 5    第五趟冒泡排序之后
// 0 1 2 3 4 5 9 8 7 6    第六趟冒泡排序之后
// 0 1 2 3 4 5 6 9 8 7    第七趟冒泡排序之后
// 0 1 2 3 4 5 6 7 9 8    第八趟冒泡排序之后
// 0 1 2 3 4 5 6 7 8 9    第九趟冒泡排序之后

这个是我写的代码的排序方式,还有的人是将最大的数移到最后一位,经过第n-1趟冒泡排序也可以将n个数字从小到大排序。总体思想是一样的,如果想要从大到小排序也是一样的思想,将最大的数移到第一位或者将最小的数移到最后一位。

for(int i = 0; i < 9; i++)
    {
        for(int j = 9; j > i; j--)
        {         
            if(num[i] > num[j])
            {
                temp=num[i];
                num[i] = num[j];
                num[j] = temp;
            } 
​
        }
​
    }

理解上述这串代码是冒泡排序的关键,开始i=0时,j的取值从1-9;依次比较

i=0;j=1~9;
a[0]=9  与 a[9]=0    比较之后 a[0]=0 a[9]=9
a[0]=0  与 a[8]=1    比较之后 a[0]=0 a[8]=1
a[0]=0  与 a[7]=2    比较之后 a[0]=0 a[7]=2     
a[0]=0  与 a[6]=3    比较之后 a[0]=0 a[6]=3 
a[0]=0  与 a[5]=4    比较之后 a[0]=0 a[5]=4 
a[0]=0  与 a[4]=5    比较之后 a[0]=0 a[4]=5 
a[0]=0  与 a[3]=6    比较之后 a[0]=0 a[3]=6 
a[0]=0  与 a[2]=7    比较之后 a[0]=0 a[2]=7 
a[0]=0  与 a[1]=8    比较之后 a[0]=0 a[1]=8
.....依次比较改变

为了验证这个是否正确,我写了一个代码验证

验证思想:生成10个数100以内的随机数,再进行冒泡排序,最后输出结果。

​
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    srand(time(NULL));
    int num[10],temp;
    for(int i = 0; i < 10; i++)
    {
        num[i]=rand()%100; // 随机生成100以内的整数
        printf("%d ",num[i]);
    }
​
    printf("\n------------------------------\n");
    for(int i = 0; i < 9; i++)
    {
        for(int j = 9; j > i; j--)
        {         
            if(num[i] > num[j])
            {
                temp=num[i];
                num[i] = num[j];
                num[j] = temp;
            } 
​
        }
​
    }
​
    for(int j = 0; j < 10; j++)
    {
        printf("%d ",num[j]);
    }
​
    return 0;
}

结果如下图所示:

完事大吉啦!

再接再励吧!!!!!!!

脑袋空空。

如果问题,请赐教,感谢!

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值