算法篇——冒泡排序

冒泡排序:對數組進行升序或降序的排序。

原理:(以升序爲例)

        使用雙重循環,依次比較數組中相鄰的兩個數,將小數放在前面,大數放在後面。

        即第一趟:首先比較第1、2兩個數,將小數放前,大數放後。然後比較第2、3兩個數,將小數放前,大數放後。以此類推,直至比較最後兩個數。至此第一趟結束,將最大的數放到了最後。

            第二趟:仍然比較第1、2兩個數(因爲可能由於第2、3兩個數交換位置,使得第1個數不再小於第2個數),將小數放前,大數放後。以此類推,直至比較到倒數第二個數(倒數第一個數已經是最大的了)。至此第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。

            以此類推,直至最終完成排序,即爲升序。

 

兩種方式:升序和降序

    /**
     * 冒泡排序(升序)
     * @param arr   被排序的數組
     */
    public static void bubbleSortUp(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;
                }
            }
        }
    }

    /**
     * 冒泡排序(降序)
     * @param arr   被排序的數組
     */
    public static void bubbleSortDown(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;
                }
            }
        }
    }

驗證

int[] arr = {11,9,22,66,44};
bubbleSortUp(arr);
LogUtil.e("冒泡排序(升序)", Arrays.toString(arr));//[9, 11, 22, 44, 66]

int[] arr1 = {11,9,22,66,44};
bubbleSortDown(arr1);
LogUtil.e("冒泡排序(降序)", Arrays.toString(arr1));//[66, 44, 22, 11, 9]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章