每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较, 跟列队一样, 从左到右两两相邻的元素比大小, 高的就和低的换一下位置. 最后最高(值最大)的肯定就排到后面了.
但是这只是把最高的排到后面了, 还得找出第二高的, 于是又从第一个开始两两比较, 高的往后站, 然后第二高的也到后面了.
然后是第三高的再往后排…
![](https://img.haomeiwen.com/i6656438/ec65241c29721e5c.png)
代码实现:
/**
* 冒泡排序
*/
public void bubbleSort01() {
int[] arr = {4,1,3,6,2,5};
/**
* 原始数组:{4,1,3,6,2,5}
* 每轮第几次比较 第一次比较 -> 第二次比较 -> 第三次比较 -> 第四次比较 -> 第五次比较
* 第一轮: {1,4,3,6,2,5}-> {1,3,4,6,2,5} -> {1,3,4,6,2,5} -> {1,3,4,2,6,5} -> {1,3,4,2,5,6}
* 第二轮: {1,3,4,2,5,6}-> {1,3,4,2,5,6} -> {1,3,2,4,5,6} -> {1,3,2,4,5,6} -> {1,3,2,4,5,6}
* 第N轮:如此下去
*/
for (int i=0;i<arr.length - 1;i++) {//共比较几轮
for (int j = 0;j < arr.length - 1 - i;j++) {//每轮比较(arr.length-1-i)次
//每轮中相邻的元素进行比较,如果前面的元素比后面的元素大,则交换位置
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
Log.i(TAG, "第"+(i+1)+"轮,i="+i+", arr="+Arrays.toString(arr));
}
Log.i(TAG, "冒泡排序结果:arr="+Arrays.toString(arr));
}
输出结果:
第1轮,i=0, arr=[1, 3, 4, 2, 5, 6]
第2轮,i=1, arr=[1, 3, 2, 4, 5, 6]
第3轮,i=2, arr=[1, 2, 3, 4, 5, 6]
第4轮,i=3, arr=[1, 2, 3, 4, 5, 6]
第5轮,i=4, arr=[1, 2, 3, 4, 5, 6]
第6轮,i=5, arr=[1, 2, 3, 4, 5, 6]
冒泡排序结果:arr=[1, 2, 3, 4, 5, 6]
网友评论