冒泡
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