1. 程式人生 > 實用技巧 >陣列排序-氣泡排序(Bubble Sort)

陣列排序-氣泡排序(Bubble Sort)


概念:

氣泡排序是一種電腦科學領域的較為簡單的排序演算法,也是最基礎的排序演算法。它重複走訪要排序的數列,一次比較兩個元素,如果它們的順序(升序/降序)與要求不相符就交換它們。走訪數列的工作是重複的進行,直到沒有再需要交換的元素,也就是說該數列已經排序完成。這個演算法的名稱由來是因為越大(或越小)的元素會經由一次次交換慢慢“浮動”到數列的頂端,故名“氣泡排序”。


排序過程:

臨近的元素兩兩進行比較,按照從小到大(從大到小)的順序進行比較交換,這樣一趟以後,最大(或最小)的元素被交換到了最後一位。然後除過本趟冒泡後的最後一位元素,其餘元素開始下一趟冒泡,直至所有元素均屬於冒泡後的最後一位元素即氣泡排序完成。


示例:

package com.cnblogs.lxj.testarraysort;

/**
 * @author liuxiaojiang
 * @packageName:com.cnblogs.lxj.testarraysort
 * @ClassName:BubbleSort
 * @Description:測試氣泡排序
 * @date 2020/11/27
 */
public class BubbleSort {

    /**
     * 主方法
     * @param args
     */
    public static void main(String[] args) {
        int[] a = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
        printArray(a);
        bubbleSort(a);
        printArray(a);
    }

    /**
     * 氣泡排序方法
     * @param a
     */
    public static void bubbleSort(int[] a){
        for(int i = 0;i < a.length;i++){
            for(int j = a.length - 1;j > i;j--){
                if(a[j - 1] > a[j]){
                    swapArray(j,j - 1,a);
                }
            }
        }
    }

    /**
     * 交換方法
     * @param j
     * @param count
     * @param a
     */
    public static void swapArray(int j,int count,int[] a){
        int temp = a[j];
        a[j] = a[count];
        a[count] = temp;
    }

    /**
     * 輸出方法
     * @param array
     */
    public static void printArray(int[] array){
        for(int a : array){
            System.out.print(a + " ");
        }
        System.out.println();
    }
}

執行結果:

3 44 38 5 47 15 36 26 27 2 46 4 19 50 48       //初始化
2 3 4 5 15 19 26 27 36 38 44 46 47 48 50       //冒泡結束

原理:


演算法分析:

氣泡排序就是把大的元素(或小的元素)往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,這個時候兩個元素也不會發生位置交換。如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相等的元素相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定的排序演算法,但是效率不是很高。