2014/04/26 Bubble Sort

冒泡排序(Bubble Sort)是一种比较简单的排序。它的原理是依次比较相邻的两个元素,如果他们的顺序相反,就交换位置,依次类推,直到最后一个元素。这是一轮比较,经过一轮比较之后,最后一个元素为最大。如果有 n 个数,需要循环 n-1 轮,每次循环中只需要比较未排序部分,即 n-1-i 。

1TMcpF.png

正常情况下,需要循环 n-1 轮,但是如果在一次循环中没有比较,那么说明已是有序,后边再继续循环也没有意思,直接退出即可。

冒泡排序的时间复杂度为 O(n^2)。

public class BubbleSortExample {
    public static void main(String[] args) {
        int[] arr = {6, 2, 4, 7, 1};
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 1. n 个数只需要循环 n-1 次
     * 2. 每次循环中只需要比较为排序部分,即 n-1-i
     * 3. 如果在一次循环中没有比较,则已是有序
     * 4. 时间复杂度为 O(n^2)
     *
     * @param arr
     */
    public static void bubbleSort(int[] arr) {
        boolean flag = false;
        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 tmp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = tmp;
                    flag = true;
                }
                System.out.println("第" + (i + 1) + "轮-第" + (j + 1) + "次:" + Arrays.toString(arr));
            }
            if (!flag) {
                break;
            } else {
                flag = false;
            }
        }
    }

}