天天看點

Java入門第34課——冒泡排序算法

問題

        冒泡排序(Bubble Sort),是一種比較簡單的排序算法。在冒泡排序算法中,需要重複的走訪要排序的數列,一次比較兩個元素,如果它們的大小順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換的元素,也就是說該數列已經排序完成。由于在排序過程中總是小數往前放,大數往後放,相當于氣泡往上升,是以稱作冒泡排序。

        本案例要求使用冒泡排序算法實作對數組的排序。有一個長度為10的整型數組,使用冒泡排序算法将數組按照升序排列,并輸出排序的過程以及結果。程式互動情況如圖所示:

Java入門第34課——冒泡排序算法

方案

        為了了解冒泡排序算法,我們先假設有一個長度為7的數組,數組内容如圖所示:

Java入門第34課——冒泡排序算法

        上圖中的數組元素為無序狀态,為實作升序排列,可以先進行第一輪比較,過程大緻如下:

        1.先比較第一對相鄰的元素(第一個位置的89和第二個位置的50):如果第一個比第二個大,就交換兩個數值;

        2.繼續比較第二對相鄰的元素(第二個位置和第三個位置):如果第二個位置上的數值大于第三個位置上的數值,則交換;

        3.繼續下去,重複上述的比較工作,直到結尾的最後一對;此時,一輪比較交換完成後,最後的元素則是數列中最大的數。

        第一輪比較的過程如圖所示:

Java入門第34課——冒泡排序算法

        由上圖可以看出,第一輪比較後,已經将數組中的最大值通過位置交換,移動到數組的最後位置上。但是,其餘的元素依然為無序狀态,是以,依然進行第二輪比較:針對除最後一個元素外的其他元素重複以上步驟,以找到剩餘元素中的最大數,且放置到倒數第二的位置上。第二輪比較的過程如圖所示:

Java入門第34課——冒泡排序算法

        由上圖可以看出,第一個位置上的50比第二個位置上的84小,是以不發生交換;而其他位置将依次發生變換,進而将84交換到倒數第二的位置上。

        然後,繼續進行其他輪比較,持續進行,每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較,則排序完成。整個排序的過程如圖所示:

Java入門第34課——冒泡排序算法

        由上圖可以看出,實作冒泡排序算法時,需要使用嵌套的兩個循環來實作:外層循環用于控制排序的輪次,裡層循環用于控制每輪排序中的兩兩互動。

步驟

        實作此案例需要按照如下步驟進行。

步驟一:定義類及main方法

        首先定義一個名為BubbleSort的類,并在類中添加Java應用程式的主方法main,代碼如下所示:

public class BubbleSort{
        public static void main(String[] args){
        }
    }
           

步驟二:建立數組    

        在main方法中建立一個長度為10的數組,并使用for語句建構一個10次的循環,在每次循環中,随機産生一個0到99之間的整數,并存入數組,然後,列印數組的内容顯示在界面上。

        此案例中,使用Random類的nextInt()方法産生随機數。代碼如下所示:

import java.util.Random;
    import java.util.Arrays;
    
    public class BubbleSort{
        public static void main(String[] args){
            
            //建立數組
            int[] arr=new int[10];
            Random ran=new Random();
            for(int i=0;i<arr.length;i++){
                arr[i]=ran.nextInt(100);
            }
            System.out.println(Arrays.toString(arr));
        }
    }
           

        注意:此步驟中,需要導入java.util包下的Random類和Arrays類。

步驟三:排序   

        使用冒泡排序算法對數組進行排序:每一輪比較中,兩兩相比,找到更大的數值移動到最後,直到都比較過一遍。為便于檢視排序的過程,将每輪比較後的數組内容輸出顯示,并将最後的結果輸出到控制台。代碼如下所示:

import java.util.Random;
    import java.util.Arrays;
    
    public class BubbleSort{
        public static void main(String[] args){
            
            //建立數組
            int[] arr=new int[10];
            Random ran=new Random();
            for(int i=0;i<arr.length;i++){
                arr[i]=ran.nextInt(100);
            }
            System.out.println(Arrays.toString(arr));
            
            //冒泡排序
            System.out.println("----------冒泡排序 開始----------");
        }
    }
           

關注公衆号,擷取學習視訊

Java入門第34課——冒泡排序算法