冒泡
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)