排序算法-冒泡排序算法

    冒泡排序算法是全部排序算法中最簡單、最基礎的一種。冒泡排序算法的思路就是交換排序,經過相鄰數據的交換來達到排序的目的。java

冒泡排序算法

    冒泡排序算法經過屢次比較和交換來實現排序,其排序流程以下:算法

  • 對數組中的各數據,依次比較相鄰的兩個元素的大小。
  • 若是前面的數據大於後面的數據,就交換這兩個數據。通過一輪的屢次比較排序後,即可將最大的數據排好。
  • 在用一樣的方法把剩下的數據逐個進行比較,最後即可按照從小到大的排序排好數組各數據。

    爲了更好的理解冒泡排序算法的執行過程,下面舉一個實際的例子來一步一步的執行冒泡排序算法。對於6個整形數據5二、2三、1八、8四、5八、11,這是一組無序的數據。對齊執行排序效果以下所示。數組

    從上面的例子能夠很是直觀地瞭解到冒泡排序算法執行過程。整個排序過程就像水泡的浮起過程,故此而得名。冒泡排序算法在對n個數據進行排序時,不管原數據有無序,都須要進行n-1步的中間排序。這種排序方法思路簡單直觀,可是缺點是執行的步驟稍長,效率不高。spa

    一種改進的方式,即在每次中間排序以後,比較一下數據是否已經按照順序排列完成,不然繼續進行冒泡排序。這樣能夠加速算法的執行過程。code

冒泡排序算法實例

    根據上面的基本的思想,咱們來動手寫一個例子說明冒泡排序在排序中的應用。排序

package Bubble;

public class BubbleAlgorithm {
    public static void bunnle(int[] a){
        int temp;

        for (int i = 1; i < a.length; i++) {
            for (int j = 0; j < a.length-1; j++) {
                if (a[j] > a[j+1]){
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j] = temp;
                }
            }
            System.out.print("第"+i+"步排序結果:");
            for (int k = 0; k < a.length; k++) {
                System.out.print(" "+a[k]);
            }
            System.out.println("\n");
        }
    }

    public static void main(String[] args) {
        int[] aa = {196,182,123,104,111,106,185,194,192,159};
        System.out.print("       初始值:");
        for (int i = 0; i < aa.length ; i++) {
            System.out.print(" "+aa[i]);
        }
        System.out.println("\n");
        bunnle(aa);
    }
}

運行結果以下:it

初始值: 196 182 123 104 111 106 185 194 192 159
第1步排序結果: 182 123 104 111 106 185 194 192 159 196
第2步排序結果: 123 104 111 106 182 185 192 159 194 196
第3步排序結果: 104 111 106 123 182 185 159 192 194 196
第4步排序結果: 104 106 111 123 182 159 185 192 194 196
第5步排序結果: 104 106 111 123 159 182 185 192 194 196
第6步排序結果: 104 106 111 123 159 182 185 192 194 196
第7步排序結果: 104 106 111 123 159 182 185 192 194 196
第8步排序結果: 104 106 111 123 159 182 185 192 194 196
第9步排序結果: 104 106 111 123 159 182 185 192 194 196

圖中顯示了每一步排序的中間結果。從中能夠看出第5步以後便已經完成對數據的排序,可是算法仍然須要進行後續的比較步驟。根據上面介紹的思路,加入判斷部分,使之可以儘早結束排序過程,從而提升程序的執行效率。調優方法以下:class

package Bubble;

public class BubbleAlgorithm {
    public static void bunnle(int[] a){
        int temp;
        //定義
        int fay = 0;

        for (int i = 1; i < a.length; i++) {
            for (int j = 0; j < a.length-1; j++) {
                if (a[j] > a[j+1]){
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
            System.out.print("第"+i+"步排序結果:");
            for (int k = 0; k < a.length; k++) {
                //開始
                if (a.length-2 >= k){
                    if (a[k]>a[k+1]){
                        fay = 1;
                    }
                }
                //結束
                System.out.print(" "+a[k]);
            }
            //開始
            if (fay == 0){
                break;
            }else {
                fay = 0;
            }
            //結束
            System.out.println("\n");
        }
    }

    public static void main(String[] args) {
        int[] aa = {196,182,123,104,111,106,185,194,192,159};
        System.out.print("       初始值:");
        for (int i = 0; i < aa.length ; i++) {
            System.out.print(" "+aa[i]);
        }
        System.out.println("\n");
        bunnle(aa);
    }
}

輸出結果以下:效率

初始值: 196 182 123 104 111 106 185 194 192 159
第1步排序結果: 182 123 104 111 106 185 194 192 159 196
第2步排序結果: 123 104 111 106 182 185 192 159 194 196
第3步排序結果: 104 111 106 123 182 185 159 192 194 196
第4步排序結果: 104 106 111 123 182 159 185 192 194 196
第5步排序結果: 104 106 111 123 159 182 185 192 194 196
相關文章
相關標籤/搜索