目录
1、冒泡排序的原理
- 循环比较相邻的元素,将小的放到前面
- 进行n-1轮比较,完成排序
冒泡排序举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:
数组: array={8 , 2 , 3 , 7 , 1}
第1轮: array={2 , 3 , 7 , 1 , 8}
第2轮: array={2 , 3 , 1, 7 | 8}
第3轮: array={2 , 1 | 3, 7 , 8}
第4轮: array={1 | 2 , 3 , 7 | 8}
2、过程分析
- i 代表次数
- j 代表比较位置
array | i | j | j + 1 | array[j] | array[j + 1] | array[j]>array[j + 1] | [j]交换[j + 1] |
第1轮 | |||||||
{8,2,3,7,1} | [0] | [0] | [1] | 8 | 2 | TRUE | 8<->2 |
{2,8,3,7,1} | [0] | [1] | [2] | 8 | 3 | TRUE | 8<->3 |
{2,3,8,7,1} | [0] | [2] | [3] | 8 | 7 | TRUE | 8<->7 |
{2,3,7,8,1} | [0] | [3] | [4] | 8 | 1 | TRUE | 8<->1 |
{2,3,7,1|8} | |||||||
第2轮 | |||||||
{2,3,7,1|8} | [1] | [0] | [1] | 2 | 3 | FALSE | -- |
{2,3,7,1|8} | [1] | [1] | [2] | 3 | 7 | FALSE | -- |
{2,3,7,1|8} | [1] | [2] | [3] | 7 | 1 | TRUE | 7<->1 |
{2,3,1|7,8} | |||||||
第3轮 | |||||||
{2,3,1|7,8} | [2] | [0] | [1] | 2 | 3 | FALSE | -- |
{2,3,1|7,8} | [2] | [1] | [2] | 3 | 1 | TRUE | 3<->1 |
{2,1|3,7,8} | |||||||
第4轮 | |||||||
{2,1|3,7,8} | [3] | [0] | [1] | 2 | 1 | TRUE | 2<->1 |
{1|2,3,7,8} | |||||||
结果 | |||||||
{1,2,3,7,8} |
- i 的取值范围是: i = 0 ~ < array.length - 1
- j 的取值范围是: j = 0 ~ < array.length - i -1
- 交换步骤伪代码如下:
if([j]>[j+1]){
[j]<->[j+1]
}
3、参考代码
public static void main(String[] args) {
int[] array = {8, 2, 3, 7, 1};
System.out.println(Arrays.toString(bubbleSort(array)));
}
private static int[] bubbleSort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - i - 1; j++) {
if (array[j] > array[j + 1]) {
int tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
}
}
}
return array;
}
--------------输出结果-------------
[1, 2, 3, 7, 8]