1.冒泡排序的基本原理
目录
对存放原始数组的数据,按照从前往后的方向进行多次扫描,每次扫描都称为一趟。当发现相邻两个数据的大小次序不符合时,即将这两个数据进行互换,如果从小大小排序,这时较小的数据就会逐个往前移动,好像气泡网上漂浮一样。
下面来看一组动态图
2.冒泡排序的特点:
升序排序当中每一轮比较会把最大的数沉到最底(这里以从小到大为例),所有相互比较的次数每一轮会比前一轮少一次。
3.排序的执行过程:
import java.util.Arrays;
/**
* 冒泡排序
* @author Mango
*/
public class BubbleSort {
public static void main(String[] args){
int[] arr = new int[]{2,4,3,6,5,8,1,0,7,9};
bubble(arr);
System.out.println(Arrays.toString(arr));
}
public static void bubble(int[] arr){
for(int a = 0; a < arr.length; a++) {
for(int b = 0; b < arr.length - 1; b++) {
if(arr[b] > arr[b + 1]) {
int temp = arr[b];
arr[b] = arr[b + 1];
arr[b + 1] = temp;
}
}
}
}
}
代码解释
1. main 方法
public static void main(String[] args) {
int[] arr = new int[]{2, 4, 3, 6, 5, 8, 1, 0, 7, 9};
bubble(arr);
System.out.println(Arrays.toString(arr));
}
-
功能:程序的入口。
-
逻辑:
-
定义了一个未排序的整数数组
arr。 -
调用
bubble方法对数组进行排序。 -
打印排序后的数组。
-
2. bubble 方法
public static void bubble(int[] arr) {
for (int a = 0; a < arr.length; a++) {
for (int b = 0; b < arr.length - 1; b++) {
if (arr[b] > arr[b + 1]) {
int temp = arr[b];
arr[b] = arr[b + 1];
arr[b + 1] = temp;
}
}
}
}
-
功能:实现冒泡排序算法。
-
逻辑:
-
外层循环:
-
遍历数组,从第一个元素到最后一个元素(
a从0到arr.length - 1)。 -
每次循环的目的是将当前未排序部分的最大值“冒泡”到数组的末尾。
-
-
内层循环:
-
从第一个元素到倒数第二个元素(
b从0到arr.length - 2)。 -
比较相邻的两个元素
arr[b]和arr[b + 1]。 -
如果
arr[b]大于arr[b + 1],则交换它们的位置。
-
-
交换操作:
-
使用一个临时变量
temp来交换两个元素的值。
-
-
示例运行过程
初始数组
[2, 4, 3, 6, 5, 8, 1, 0, 7, 9]
每轮排序后的数组
-
第1轮:
-
比较并交换相邻元素,将最大值
9冒泡到末尾。 -
结果:
[2, 3, 4, 5, 6, 1, 0, 7, 8, 9]
-
-
第2轮:
-
比较并交换相邻元素,将次大值
8冒泡到倒数第二的位置。 -
结果:
[2, 3, 4, 5, 1, 0, 6, 7, 8, 9]
-
-
第3轮:
-
比较并交换相邻元素,将
7冒泡到倒数第三的位置。 -
结果:
[2, 3, 4, 1, 0, 5, 6, 7, 8, 9]
-
-
第4轮:
-
比较并交换相邻元素,将
6冒泡到倒数第四的位置。 -
结果:
[2, 3, 1, 0, 4, 5, 6, 7, 8, 9]
-
-
第5轮:
-
比较并交换相邻元素,将
5冒泡到倒数第五的位置。 -
结果:
[2, 1, 0, 3, 4, 5, 6, 7, 8, 9]
-
-
第6轮:
-
比较并交换相邻元素,将
4冒泡到倒数第六的位置。 -
结果:
[1, 0, 2, 3, 4, 5, 6, 7, 8, 9]
-
-
第7轮:
-
比较并交换相邻元素,将
3冒泡到倒数第七的位置。 -
结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
-
第8轮:
-
比较并交换相邻元素,数组已经有序,无需交换。
-
结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
-
第9轮:
-
比较并交换相邻元素,数组已经有序,无需交换。
-
结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
-
第10轮:
-
比较并交换相邻元素,数组已经有序,无需交换。
-
结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
最终排序结果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
代码解析:该算法代码由外层循环和内层循环组成,内层循环包括比较大小语句和互换位置语句
外层循环主要是控制代码的执行次数,内层循环主要是进行比较和位置交换
外层循环每次循环都是将最最大的数放到最后边所以内层循环每次都需要减 -1
输出结果:


394

被折叠的 条评论
为什么被折叠?



