1. 程式人生 > >Java程式設計師必備-資料結構與演算法之氣泡排序

Java程式設計師必備-資料結構與演算法之氣泡排序

氣泡排序基本思想:

首先,將N個元素的第一個和第二個進行比較,如果兩個元素的位置為逆序,則交換位置,進而比較第二個和第三個元素,如此類推,一直比較到第N-1和第N個元素為止。

如同下圖氣泡排序例子

首先我們在第一趟通過比較,將最大值53移到了最後面,第二趟右通過比較將第二個最大值48移動到了倒數第二個為止,可以發現,第i趟的比較就是將前面n-i+1個元素進行排序,並將最大元素放到n-i+1的位置。排序共進行了n-1此比較,最後得出一串由小到大的排列順序。

演算法的Java程式碼實現如下:

輸入引數:Object[] r是一串陣列引數,low和high分別代表排序區間的最低位和最高位

輸出引數:在陣列r的基礎上進行有序的排列

public void MaopaoSort(Object[] r, int low,int high){
    int n = high - low +1forint i = 0; i < n; i++){
        for(int j = low;j<=high-i; j--){
            if(strategy.compare(r[j],r[j+1])>0){
                Object temp = r[j];
                r[j] = r[j+1
]; r[j+1] = temp; } } } }

效率分析:

1. 空間效率:只佔用一個輔存單元

2. 時間效率:待排序元素個數為n,則外層迴圈的比較次數為n-1次,對j個元素的子序列進行排序,則內層迴圈為j-1次,考慮最大情況下,則為n-1次,由此,氣泡排序總的比較次數為n(n-1)/2,所以時間複雜度為o(n的平方)。