冒泡思想:依次比较相邻的两个数据,将小数放前面,大数放后面。
1.流程分析:我们可以将两个位置相邻的元素的比较抽象为arr[j]和arr[j+1]比较,如果arr[j]比arr[j+1]大,就交换两数。以数组[5,9,1,6,7,3]为例:
第一趟排序(外层循环执行一次):[5,9,1,6,7,3]
执行次数 | 是否交换 | 执行结果 |
---|
第一次排序(内循环一次) | 5小于9,不交换 | [5,9,1,6,7,3] |
第二次排序(内循环一次) | 9大于1,交换 | [5,1,9,6,7,3] |
第三次排序(内循环一次) | 9大于6,交换 | [5,1,6,9,7,3] |
第四次排序(内循环一次) | 9大于7,交换 | [5,1,6,7,9,3] |
第五次排序(内循环一次) | 9大于3,交换 | [5,1,6,7,3,9] |
| | |
第二趟排序(外层循环执行一次):[5,1,6,7,3,9]
执行次数 | 是否交换 | 执行结果 |
---|
第一次排序(内循环一次) | 5大于1,交换 | [1,5,6,7,3,9] |
第二次排序(内循环一次) | 5小于6,不交换 | [1,5,6,7,3,9] |
第三次排序(内循环一次) | 6小于7,不交换 | [1,5,6,7,3,9] |
第四次排序(内循环一次) | 7大于3,交换 | [1,5,6,3,7,9] |
第三趟排序(外层循环执行一次):[1,5,6,3,7,9]
执行次数 | 是否交换 | 执行结果 |
---|
第一次排序(内循环一次) | 1小于5,不交换 | [1,5,6,3,7,9] |
第二次排序(内循环一次) | 5小于6,不交换 | [1,5,6,3,7,9] |
第三次排序(内循环一次) | 6大于3,交换 | [1,5,3,6,7,9] |
第四趟排序(外层循环执行一次):[1,5,3,6,7,9]
执行次数 | 是否交换 | 执行结果 |
---|
第一次排序(内循环一次) | 1小于5,不交换 | [1,5,3,6,7,9] |
第二次排序(内循环一次) | 5大于3,交换 | [1,3,5,6,7,9] |
第五趟排序(外层循环执行一次):[1,3,5,6,7,9]
执行次数 | 是否交换 | 执行结果 |
---|
第一次排序(内循环一次) | 1小于3,不交换 | [1,3,5,6,7,9] |
2.实现代码:
public void bubble(){
int[] num = {5,9,1,6,7,3};
for(int i = 0;i < num.length-1;i++){
for(int j = 0;j < num.length-1-i;j++){
if(num[j] > num[j+1]){
int temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}
}