int[] nums = new int[]{3, 36, 22, 5, 87};
for (int i = 0; i < nums.length - 1; i++) {
for (int j = 0; j < nums.length - 1 - i; j++) {
if (nums[j] > nums[j+1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
外层循环控制比较的轮次
例如 a b c d e 5个位置的数字进行排序
ab bc cd de (第1轮比较4次)
ab bc cd (第2轮比较3次)
ab bc (第3轮比较2次)
ab (第4轮比较1次)
数组 length 为5,则一共需要比较 length - 1 轮
i 的下标为0 1 2 3
内层循环控制每一轮内比较的次数
第1轮 4 次 4 = 5 - 1 - 0
第2轮 3 次 3 = 5 - 1 - 1
第3轮 2 次 2 = 5 - 1 - 2
第4轮 1 次 1 = 5 - 1 - 3
每轮内比较 length - 1 - i 次
在该代码中如果nums[j] > nums[j+1] 则将这两个数字调换位置
则是把大数往后移
每一轮确定一个最大的数
下一轮这个最大的数不参与比较