一、算法原理
- 比较相邻两个元素a[j]和a[j+1],如果a[j] > a[j+1]则交换两个元素的位置;
- 对每一对相邻的元素执行同样操作,从而开始一对到结束一对,在这一步骤完成后最后一个元素就是最大的元素;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
二、算法分析
以数组{6, 3, 8, 2, 9, 1}为例
第一轮: i = 0
- 第1次排序:比较6和3,6>3,交换位置:[3, 6, 8, 2, 9, 1]
- 第2次排序:比较6和8,6<8,不交换位置
- 第3次排序:比较8和2,8>2,交换位置:[3, 6, 2, 8, 9, 1]
- 第4次排序:比较8和9,8<9,不交换位置
- 第5次排序:比较9和1,9>1,交换位置:[3, 6, 2, 8, 1, 9]
第二轮: i = 1
- 第1次排序:比较3和6,3<6,不交换位置
- 第2次排序:比较6和2,6>2,交换位置:[3, 2, 6, 8, 1, 9]
- 第3次排序:比较6和8,6<8,不交换位置
- 第4次排序:比较8和1,8>1,交换位置:[3, 2, 6, 1, 8, 9]
第三轮: i = 2
- 第1次排序:比较3和2,3>2,交换位置:[2, 3, 6, 1, 8, 9]
- 第2次排序:比较3和6,3<6,不交换位置
- 第3次排序:比较6和1,6>1,交换位置:[2, 3, 1, 6, 8, 9]
第四轮: i = 3
- 第1次排序:比较2和3,2<3,不交换位置
- 第2次排序:比较3和1,3>1,交换位置:[2, 1, 3, 6, 8, 9]
第五轮: i = 4
- 第1次排序:比较2和1,2>1,交换位置:[1, 2, 3, 6, 8, 9]
排序结束,从以上可以知道:
比较次数C = (N -1) + (N - 2) + … + 2 + 1 = N * (N-1)/2
移动最少次数:Mmin = 0
移动最大次数:Mmin = 3*N(N-1)/2
如需查看元素交换动态图,请移步:Comparison Sorting Algorithms
三、算法实现
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args