基本思想

冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。

以从大到小为例。

每次都是比较相邻的两个数,如果后面的数比前面的数大,则交换这两个数的位置。一直比较下去直到最后两个数比较完毕后,最小的数就在最后一个了。就如同是一个气泡,一步一步往后“翻滚” ,直到最后一位。所以这个排序的方法有一个很好听的名字“冒泡排序” 。

每将一个数归位我们将其称为“一趟” 。每一趟,都是将小的归位(先是最小,后次小,次后第三小…)。

如果有 n 个数进行排序,只需将 n-1 个数归位,也就是说要进行n-1 趟操作。而“每一趟”都需要从第 1 位开始进行相邻两个数的比较,将较小的一个数放在后面,比较完毕后向后挪一位继续比较下面两个相邻数的大小,重复此步骤,直到最后一个尚未归位的数, 已经归位的数则无需再进行比较 (已经归位的数你还比较个啥, 浪费表情) 。

核心思想

冒泡排序的核心部分是双重嵌套循环。

##时间复杂度:O(N^2)

##Java实现

    public static void main(String[] args) {
        int length = 10;
        int maxValue = 20;
        int[] array = new int[length];
        Random r = new Random();
        for (int i = 0; i < array.length; i++) {
            array[i] = r.nextInt(maxValue);
        }
        System.out.println("before");
        print(array);
        bubbleSort(array);
        System.out.println("after");
        print(array);
    }


    public static void bubbleSort(int[] array) {
        int tmp = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length-1; j++) {
                if (array[j] < array[j+1]) {//如果前一个比后一个小,则进行交换。这样子就可以是从大到小。
                    tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                }
            }
        }
    }


    public static void print(int[] array) {
        System.out.println(Arrays.toString(array));
    }

总结

冒泡比较耗时