一、定义

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列, 一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

二、算法示例讲解(Java)

以数组10, 9, 8, 7, 6, 5, 4, 3, 2, 1为样例进行排序,数组长度为10,以外层for循环分组,会进行9组比较,每组比较最后结果就是把最大值找到放到最后面。

public static void bubbleSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
       }
}
  • 第1组比较:

循环条件数据为:[10, 9, 8, 7, 6, 5, 4, 3, 2]
实际比较范围数据:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

比较对象arr[j]=10和arr[j + 1]=9进行比较
第1组第1次处理结果:[9, 10, 8, 7, 6, 5, 4, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=8进行比较
第1组第2次处理结果:[9, 8, 10, 7, 6, 5, 4, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=7进行比较
第1组第3次处理结果:[9, 8, 7, 10, 6, 5, 4, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=6进行比较
第1组第4次处理结果:[9, 8, 7, 6, 10, 5, 4, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=5进行比较
第1组第5次处理结果:[9, 8, 7, 6, 5, 10, 4, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=4进行比较
第1组第6次处理结果:[9, 8, 7, 6, 5, 4, 10, 3, 2, 1]
比较对象arr[j]=10和arr[j + 1]=3进行比较
第1组第7次处理结果:[9, 8, 7, 6, 5, 4, 3, 10, 2, 1]
比较对象arr[j]=10和arr[j + 1]=2进行比较
第1组第8次处理结果:[9, 8, 7, 6, 5, 4, 3, 2, 10, 1]
比较对象arr[j]=10和arr[j + 1]=1进行比较
第1组第9次处理结果:[9, 8, 7, 6, 5, 4, 3, 2, 1, 10]
  • 第2组比较:

循环条件数据为:[9, 8, 7, 6, 5, 4, 3, 2]
实际比较范围数据:[9, 8, 7, 6, 5, 4, 3, 2, 1]

比较对象arr[j]=9和arr[j + 1]=8进行比较
第2组第1次处理结果:[8, 9, 7, 6, 5, 4, 3, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=7进行比较
第2组第2次处理结果:[8, 7, 9, 6, 5, 4, 3, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=6进行比较
第2组第3次处理结果:[8, 7, 6, 9, 5, 4, 3, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=5进行比较
第2组第4次处理结果:[8, 7, 6, 5, 9, 4, 3, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=4进行比较
第2组第5次处理结果:[8, 7, 6, 5, 4, 9, 3, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=3进行比较
第2组第6次处理结果:[8, 7, 6, 5, 4, 3, 9, 2, 1, 10]
比较对象arr[j]=9和arr[j + 1]=2进行比较
第2组第7次处理结果:[8, 7, 6, 5, 4, 3, 2, 9, 1, 10]
比较对象arr[j]=9和arr[j + 1]=1进行比较
第2组第8次处理结果:[8, 7, 6, 5, 4, 3, 2, 1, 9, 10]
  • 第3组比较:

循环条件数据为:[8, 7, 6, 5, 4, 3, 2]
实际比较范围数据:[8, 7, 6, 5, 4, 3, 2, 1]

比较对象arr[j]=8和arr[j + 1]=7进行比较
第3组第1次处理结果:[7, 8, 6, 5, 4, 3, 2, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=6进行比较
第3组第2次处理结果:[7, 6, 8, 5, 4, 3, 2, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=5进行比较
第3组第3次处理结果:[7, 6, 5, 8, 4, 3, 2, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=4进行比较
第3组第4次处理结果:[7, 6, 5, 4, 8, 3, 2, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=3进行比较
第3组第5次处理结果:[7, 6, 5, 4, 3, 8, 2, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=2进行比较
第3组第6次处理结果:[7, 6, 5, 4, 3, 2, 8, 1, 9, 10]
比较对象arr[j]=8和arr[j + 1]=1进行比较
第3组第7次处理结果:[7, 6, 5, 4, 3, 2, 1, 8, 9, 10]
  • 第4组比较:

循环条件数据为:[7, 6, 5, 4, 3, 2]
实际比较范围数据:[7, 6, 5, 4, 3, 2, 1]
比较对象arr[j]=7和arr[j + 1]=6进行比较

第4组第1次处理结果:[6, 7, 5, 4, 3, 2, 1, 8, 9, 10]
比较对象arr[j]=7和arr[j + 1]=5进行比较
第4组第2次处理结果:[6, 5, 7, 4, 3, 2, 1, 8, 9, 10]
比较对象arr[j]=7和arr[j + 1]=4进行比较
第4组第3次处理结果:[6, 5, 4, 7, 3, 2, 1, 8, 9, 10]
比较对象arr[j]=7和arr[j + 1]=3进行比较
第4组第4次处理结果:[6, 5, 4, 3, 7, 2, 1, 8, 9, 10]
比较对象arr[j]=7和arr[j + 1]=2进行比较
第4组第5次处理结果:[6, 5, 4, 3, 2, 7, 1, 8, 9, 10]
比较对象arr[j]=7和arr[j + 1]=1进行比较
第4组第6次处理结果:[6, 5, 4, 3, 2, 1, 7, 8, 9, 10]
  • 第5组比较:

循环条件数据为:[6, 5, 4, 3, 2]
实际比较范围数据:[6, 5, 4, 3, 2, 1]

比较对象arr[j]=6和arr[j + 1]=5进行比较
第5组第1次处理结果:[5, 6, 4, 3, 2, 1, 7, 8, 9, 10]
比较对象arr[j]=6和arr[j + 1]=4进行比较
第5组第2次处理结果:[5, 4, 6, 3, 2, 1, 7, 8, 9, 10]
比较对象arr[j]=6和arr[j + 1]=3进行比较
第5组第3次处理结果:[5, 4, 3, 6, 2, 1, 7, 8, 9, 10]
比较对象arr[j]=6和arr[j + 1]=2进行比较
第5组第4次处理结果:[5, 4, 3, 2, 6, 1, 7, 8, 9, 10]
比较对象arr[j]=6和arr[j + 1]=1进行比较
第5组第5次处理结果:[5, 4, 3, 2, 1, 6, 7, 8, 9, 10]
  • 第6组比较:

循环条件数据为:[5, 4, 3, 2]
实际比较范围数据:[5, 4, 3, 2, 1]

比较对象arr[j]=5和arr[j + 1]=4进行比较
第6组第1次处理结果:[4, 5, 3, 2, 1, 6, 7, 8, 9, 10]
比较对象arr[j]=5和arr[j + 1]=3进行比较
第6组第2次处理结果:[4, 3, 5, 2, 1, 6, 7, 8, 9, 10]
比较对象arr[j]=5和arr[j + 1]=2进行比较
第6组第3次处理结果:[4, 3, 2, 5, 1, 6, 7, 8, 9, 10]
比较对象arr[j]=5和arr[j + 1]=1进行比较
第6组第4次处理结果:[4, 3, 2, 1, 5, 6, 7, 8, 9, 10]
  • 第7组比较:

循环条件数据为:[4, 3, 2]
实际比较范围数据:[4, 3, 2, 1]

比较对象arr[j]=4和arr[j + 1]=3进行比较
第7组第1次处理结果:[3, 4, 2, 1, 5, 6, 7, 8, 9, 10]
比较对象arr[j]=4和arr[j + 1]=2进行比较
第7组第2次处理结果:[3, 2, 4, 1, 5, 6, 7, 8, 9, 10]
比较对象arr[j]=4和arr[j + 1]=1进行比较
第7组第3次处理结果:[3, 2, 1, 4, 5, 6, 7, 8, 9, 10]
  • 第8组比较:

循环条件数据为:[3, 2]
实际比较范围数据:[3, 2, 1]

比较对象arr[j]=3和arr[j + 1]=2进行比较
第8组第1次处理结果:[2, 3, 1, 4, 5, 6, 7, 8, 9, 10]
比较对象arr[j]=3和arr[j + 1]=1进行比较
第8组第2次处理结果:[2, 1, 3, 4, 5, 6, 7, 8, 9, 10]
  • 第9组比较:

循环条件数据为:[2]
实际比较范围数据:[2, 1]

比较对象arr[j]=2和arr[j + 1]=1进行比较
第9组第1次处理结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
02-28 23:55