冒泡

复制代码
void main(){
    int num[x];
    for (int i = 0; i < x - 1; i++) {
         for (int j = 0; j < x - i - 1; j++) {
            if (num[j] > num[j + 1]) {
                int temp = num[j];
                num[j] = num[j + 1];
                num[j + 1] = temp;
            }
        }
    }
}
复制代码

两层循环,外层循环次数为数组元素个数-1,内层循环次数为数组元素个数-当前外层循环次数(也就是上面说的i)-1,按上面

num[j] > num[j + 1]

其实本质就是每次从头开始把相邻的两个数进行对比,大的放到最后(一轮就能把最大的放大最后),然后继续重头开始比较,但是比较次数-1(因为最后的数肯定是最大的,第二轮后倒数第二的数就是第二大的,如此类推),可以简单想象为,每一轮外循环结束后,数组中最大的数会排最后,且数组长度必定比上一次的短1。

例:

原数组:3142,即x为4,外层循环的i<3

此时i=0,符合i<3,那么需要j<3,数组为:3142

i=0,j=0;——>判断j=0,符合j<3,开始比较num[0]和num[1],也就是比较3和1,需要交换,此时数组由3142为1342,然后j++,j=1

i=0,j=1;——>判断j=1,符合j<3,比较num[1]和num[2],也就是比较3和4,不需要交换,此时数组保持为1342,然后j++,j=2

i=0,j=2;——>判断j=2,符合j<3,比较num[3]和num[4],也就是比较4和2,需要交换,此时数组由1342为1324,然后j++,j=3

i=0,j=3;——>判断j=2,不符合j<3,跳出,内循环,此时i++,i=1,数组为:1324

此时i=1,符合i<3,那么需要j<2,数组为:1324

i=1,j=0;——>判断j=0,符合j<2,开始比较num[0]和num[1],也就是比较1和3,不需要交换,此时数组保持为1324,然后j++,j=1

i=1,j=1;——>判断j=1,符合j<2,开始比较num[1]和num[2],也就是比较3和2,需要交换,此时数组由1342为1234,然后j++,j=2

i=1,j=2;——>判断j=2,不符合j<2,跳出,内循环,此时i++,i=2,数组为:1234

此时i=2,符合i<3,那么需要j<1,数组为:1234

i=2,j=0;——>判断j=0,符合j<1,开始比较num[0]和num[1],也就是比较1和2,不需要交换,此时数组保持为1234,然后j++,j=1

i=2,j=1;——>判断j=1,不符合j<1,跳出,内循环,此时i++,i=3,数组为:1234

此时i=3,不符合i<3,外循环结束,数组结果为:1234

posted @   Morning枫  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示