参与比较的数据:2,6,4,3,8,5,1
第一次循环:
2 6 4 3 8 5 1(2与6比较,不交换)
2 4 6 3 8 5 1(6与4比较,交换)
2 4 3 6 8 5 1 (6与3比较,交换)
2 4 3 6 8 5 1(6与8比较,不交换)
2 4 3 6 5 8 1 (8与5比较,交换)
2 4 3 6 5 1 8(8与1比较,交换)
![](https://i-blog.csdnimg.cn/blog_migrate/c7274b5a539527a467dec006e29fd5a5.png)
第一次循环过程
由此可以看出每次循环都是找到本次所需循环的最大值放在数组尾部
第二次循环
![](https://i-blog.csdnimg.cn/blog_migrate/072a47ab8afa9c148f596ea206289f1c.png)
第二次循环过程
第三次循环
![](https://i-blog.csdnimg.cn/blog_migrate/e244014b9ea4f03cb9691ee0611c2422.png)
第三次循环过程
![](https://i-blog.csdnimg.cn/blog_migrate/f6b4deaf507e79d5020c13b7172cb366.png)
第四次循环过程
![](https://i-blog.csdnimg.cn/blog_migrate/96a6520a83d52bf8594328d166f15d17.png)
第五次循环过程
![](https://i-blog.csdnimg.cn/blog_migrate/c3818a331bc351fdc289a976adb612cf.png)
第六次循环过程
至多循环n-1次,n是要排序数的个数
具体代码如下
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {2,6,4,3,8,5,1};
// i用来控制循环次数,冒泡排序的外层循环i
// 写成下面的方法可以减少内层循环的次数
/* 否则是这样
* for (int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1;j++){
* */
for (int i=arr.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(arr[j]>arr[j+1]){
int temp= arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int i =0;i<arr.length;i++)
System.out.println(arr[i]);
}
}