三大简单排序之一:冒泡
什么是冒泡
作为三大简单排序中最简单的排序,它简单粗暴,两个for循环直接排序完成。
为什么叫冒泡?像鱼吐泡泡一样,将一段序列中最大的或者最小的数,吐到最顶端。
它是怎么冒泡的
可以想象一下,序列的第一位是池底,最后一位是水面。如果是从小到大排序
- 将第一位与第二位比较,若第一位更大则相互换位置,否则就不交换
- 继续将第二位与第三位比较,重复第一步骤。
- 直到将最大的数吐到水面,即最大数到了最后一位
以上是吐了第一个泡泡,这里被吐出的泡泡,就不会参与比较了,然后继续从池底开始,开始吐第二个泡泡,也就是将除第一个吐出的最大数以外的最大数也吐到水面
以此类推,当将最后一个泡泡吐完,排序也就完成了。
看以下动态图,可以想象最左边是池底,右边是水面。
代码实现
//定义一个数组
int[] arr = new int[]{8,3,4,5,10,2,1,9};
//定义一个临时变量,用于两个数交换位置
int temp=0;
//第一个for循环,循环遍历每个数,使每个数都参与第二个for循环的冒泡过程
for(int i=0;i< arr.length;i++){
//第二个for循环,指一个泡泡是如何从池底到水面的
for (int j=0;j< arr.length-i-1;j++){
//这里if循环用于两个数的位置交换
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
打印输出数组arr,得到结果如下
[1, 2, 3, 4, 5, 8, 9, 10]
注意
这里千万要强调一下,第二个for循环中,为什么要j<arr.length-i-1,
有两点原因:
- 已经吐泡到水面的最大数不参与排序,所以要j<arr.length-i
- 避免数组越界,后面要再-1