冒泡——我们第一想到的就是水烧开后出现气泡,一个接一个,咕噜咕噜……同样我们的冒泡排序就是用这样一个接一个冒泡的思想去用在一组需要排序的数中。
首先,我们需要了解冒泡排序是怎样的一个排法。
*名词解释:冒泡排序——相邻两个数值比较大小,并交换位置。
想必同学们都知道两数之间交换位置的方法:
if(a > b){
int temp = a;
a = b;
b = temp;
}
下面我们进行升序排序,仔细看我怎么一步一步去交换位置。
比如数组 arr[ ] = { 4, 2, 5, 1, 3 }
第一组
第一次排序后:4 和 2 进行交换
2 | 4 | 5 | 1 | 3 |
第二次排序后:4 和 5 进行交换
2 | 4 | 5 | 1 | 3 |
第三次排序后:5 和 1 进行交换
2 | 4 | 1 | 5 | 3 |
第四次排序后:5 和 3 进行交换
2 | 4 | 1 | 3 | 5 |
现在我们就拿到了最大值并且把它安置在了最后
这时我们可以写下这样一段排序代码:
for(int j = 0; j < arr.length - 1; j++){//循环次数为数组长度-1
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
第二组
第一次排序后:2 和 4 进行交换
2 | 4 | 1 | 3 | 5 |
第二次排序后:4 和 1 进行交换
2 | 1 | 4 | 3 | 5 |
第三次排序后:4 和 3 进行交换
2 | 1 | 3 | 4 | 5 |
现在我们得到了第二大的值:
for(int j = 0; j < arr.length -1 -1; j++){//循环次数为数组长度-1-1
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
第三组
第一次排序后:2 和 1 进行交换
1 | 2 | 3 | 4 | 5 |
第二次排序后:2 和 3 进行交换
1 | 2 | 3 | 4 | 5 |
得到第三大的值:
for(int j = 0; j < arr.length -1 -1 -1; j++){//循环次数为数组长度-1-1-1
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
第四组
第一次排序后:1 和 2 进行交换
1 | 2 | 3 | 4 | 5 |
for(int j = 0; j < arr.length -1 -1 -1 -1; j++){//循环次数为数组长度-1-1-1-1
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
现在我们就得到了我们想要的结果:1 2 3 4 5
我们根据我们这四组的数据写出如下代码:
for(int i = 0; i < arr.length -1; i++){//循环了四组,既数组长度-1
}
最后,我们把我们总结出的几段代码结合在一起:
public class TestBubble{
public static void main(String[] args){
int[] arr = {4, 2, 5, 1, 3};
for(int i = 0; i < arr.length - 1; i++){
for(int j = 0; j < arr.length - 1 - i; j++){//因为每组的循环次数递减,所以我们可以-i来达到递减
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
Foreach(arr);//调用遍历函数
}
public static void Foreach(int[] arr){//定义一个遍历函数
for(int i : arr){//for each循环
System.out.print(i);
}
System.out.println();
}
}
运行结果:12345