iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0

從這篇往後的文章,我都是向一名HackMD上的一位作者Aquamay學習,演算法的領域很大很廣很深,如果對於內容有任何問題或是好奇的,也都歡迎去參考他的文章內容,講的都非常淺顯易懂。

泡沫排序法

  • 我們拿升序泡沫排序法來說,將相鄰的元素兩兩做比較,當左邊的數比右邊的數大,則將兩數交換,若沒有則直接換下一個元素做比較,做完一輪之後序列中最大的數就會被排到最後一個位置。

程式範例試做:

public class Alex1007_1 {
    public static void main(String[] args) {
        int arr[] = {9,3,6,8,2,4,5};
        System.out.println("原陣列: "+Arrays.toString(arr));
        int temp = 0; 
        for(int j = 0; j < arr.length -1; j++) {
            for(int i = 0; i < arr.length - 1 - j; i++) {
                if(arr[i] > arr[i+1]) {
                    temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
            System.out.println("第 "+(j+1)+" 輪排序: "+Arrays.toString(arr));
        }

        
    }
}

程式執行結果:

原陣列: [9, 3, 6, 8, 2, 4, 5]
第 1 輪排序: [3, 6, 8, 2, 4, 5, 9]
第 2 輪排序: [3, 6, 2, 4, 5, 8, 9]
第 3 輪排序: [3, 2, 4, 5, 6, 8, 9]
第 4 輪排序: [2, 3, 4, 5, 6, 8, 9]
第 5 輪排序: [2, 3, 4, 5, 6, 8, 9]
第 6 輪排序: [2, 3, 4, 5, 6, 8, 9]

不過由於我們非常容易就發現,第四行之後執行的結果是完全一模一樣,所以將程式碼做以下修改。

程式範例試做:

public class Alex1007_2 {
    public static void main(String[] args) {
        int arr[] = {9,3,6,8,2,4,5};
        System.out.println("原陣列: "+Arrays.toString(arr));
        int temp = 0; 
        boolean flag = flse;
        for(int j = 0; j < arr.length -1; j++) {
            for(int i = 0; i < arr.length - 1 - j; i++) {
                if(arr[i] > arr[i+1]) {
                    flag = true;
                    temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
            }
        }

        if(!flag) { //在一輪排序中一次交換都沒有發生過
            break;
        } else {
            flag = false; //重置flag進行下一輪排序
        }
        System.out.println("第 "+(j+1)+" 輪排序: "+Arrays.toString(arr));
    }

程式執行結果:

原陣列: [9, 3, 6, 8, 2, 4, 5]
第 1 輪排序: [3, 6, 8, 2, 4, 5, 9]
第 2 輪排序: [3, 6, 2, 4, 5, 8, 9]
第 3 輪排序: [3, 2, 4, 5, 6, 8, 9]
第 4 輪排序: [2, 3, 4, 5, 6, 8, 9]

上一篇
Java程式-認識演算法
下一篇
Java程式-選擇排序法&插入排序法
系列文
自學Java物件導向程式語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言