C语言----随机输入10个数,从小到大依次排列

//冒泡排序
//外层循环表示排的次数
//内层循环表示每次的比较数据
#include <stdio.h>

int main() {
    // 初始化一个包含 10 个整数的数组
    int arr[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };

    // 使用冒泡排序算法对数组进行排序
    for (int i = 0; i < 9; i++)
    {  
        // 外循环,控制比较轮数,因为每次最大的数都会沉到最后,所以只需要比较 n-1 轮即可
        for (int j = 0; j < 10 - 1 - i; j++)
        {  
            // 内循环,控制每轮比较的次数,每轮比较相邻的两个数
            if (arr[j] > arr[j + 1])
            {  
                // 如果前一个数大于后一个数,就交换它们的位置,使得较大的数往后移动
                int t = arr[j];  
                // 临时变量 t 用于交换两个数的值
                arr[j] = arr[j + 1];  
                // 将后一个数赋值给前一个数
                arr[j + 1] = t;  
                // 将临时变量中存储的前一个数的值赋值给后一个数,完成交换
            }
        }
    }
    // 打印排序后的数组
    for (int i = 0; i < 10; i++)
    {
        printf("%d\t", arr[i]);  // 以制表符分隔的形式打印数组中的每个元素
    }

    return 0;
}


//疑点1
//为什么第一个for循环中,循环次数是9(i<9)


//模拟一下循环过程
//第一轮循环:
//在第一轮循环中,面对10个数,我们需要进行9次比较
//进行之后,最大的数9已经变到最底部了
//第二论循环中,我们就只需要进行8次比较了,因为第一轮的比较已经将最大的数字沉底
//进行之后,现在最大的数字8也就到了底部
//在这个例子中,我们可以看到在每一轮的循环中,最后一个元素都会背确定为当前轮次的最大值
//因此我们可以在下一轮循环时少进行一次比较
//所以我们循环的表达式设置为i<9



//疑点2
//为什么内层循环,循环的上限是 10-1-i
//10是数组的长度,i是外层循环的当前轮次
//具体来说,假设我们有一个长度为10的数组,当前外层循环的轮次是0
//在第一轮循环结束的时候,数组的最后一个元素已经是最大的了,因此不用参加比较
//所以内层循环的上限就是 10-1-0
//当外层循环进行到第二轮的时候,i=1;
//在第二轮循环结束后,数组的倒数第二大的元素已经是次大,因此不需要再次参加比较
//此时内层循环的上限就是 10-1-1
//类推,随着外层循环的进行,每一轮内层循环的上限都会逐渐减小
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值