排序算法之冒泡排序

冒泡排序經典的排序算法,實現的思想是經過兩兩相鄰的元素比較,使較大的數字不斷向隊列上部浮動,就如同水裏的一個氣泡通常不斷向上浮,因此才獲得一個"冒泡排序"好聽的名字。javascript

wKioL1e1LP2hXdsiAACp2m90VC4671.png-wh_50圖片轉載css


那接下來我經過一個小例子來看看冒泡排序的實現:
html

[7,4,1,8,2]

上面的數組實現從小到大排序。java

由於冒泡排序是兩兩相鄰比較,因此
算法

step1 
  7與4比較,7>4,交換位置後得數組:[4,7,1,8,2]
  
step2
  7與1比較,7>1,交換位置後得數組:[4,1,7,8,2]
  
step3
  7與8比較,7<8,不進行交換得數組:[4,1,7,8,2] 
  
step4
  8與2比較,8>2,交換位置後得數組:[4,1,7,2,8]

至此第一輪冒泡結束,咱們看到數組中元素最大的8已經到了最後,這就是通過一輪冒泡,最大的元素已經浮動到最上面。以後只要重複這4個步驟就能夠了。數組

可是這個沒經優化的冒泡排序的時間複雜度是O(N2)。ide


優化的思想就是:若是數組中某個元素到最後一個元素是已經排好序的,那麼這段數據就不須要進行比較並排序了。優化

[2,1,4,5,6,7,8]

像這個數組中,[4,5,6,7,8]是已經排好序的,只須要排[2,1]就ok。spa


代碼以下:orm

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>冒泡排序</title>
    <script type="text/javascript">
        function myclick(){
            var value = document.getElementById("sort_array").value;
            var array = value.split(",");
            document.getElementById("echo_array").value = mysort(array).toString();

        }
        //排序算法
        function mysort(arr){
            var i,flag = 1,temp,j=arr.length;
            while(flag){

                flag = 0;//每次數組的循環以前置爲0
                for(i=1;i<j;i++){
                    if(parseInt(arr[i])>parseInt(arr[i-1])){
                        temp = arr[i];
                        arr[i] = arr[i-1];
                        arr[i-1] = temp;
                        flag = 1;//標誌位,若是有交換則置爲1

                    }
                }
                j = i;//記錄最後一次交換的數組下標
            }
            return arr;
        }
    </script>
    <style type="text/css">
        input{
            width: 300px;
        }
    </style>
</head>
<body>
    <label>請輸入待排序的數字,用逗號隔開:</label><input type="text" id="sort_array"/>
    <label>請輸入待排序的數字,用逗號隔開:</label><input type="text" id="echo_array"/>
    <input type="button" value="排序" onclick="myclick()"/>
</body>
</html>

這樣通過優化過的算法最好的時間複雜度是O(n),最壞的狀況下仍是O(N2)

相關文章
相關標籤/搜索