【排序算法】-冒泡排序Bubble Sort

簡介

冒泡排序,將臨近的數字兩兩比較,按照大小順序進行位置交換。

  • 第一趟排序后,最大的數字(從小到大排序)或最小的數字(從大到小排序)被交換到最后一位,也就是說最后一位被確定;
  • 第二趟確定倒數第二位數字;
  • 以此類推,第三趟確定倒數第三位數字,第四趟確定倒數第4位數字,第五趟...

講解

設示例數組為:[5,2,7,1,4,9,8],小->大排序;

  1. 第一趟排序
  • 第一次:[5,2,7,1,4,9,8]中5與2比較,5>2所以交換位置,數組變作為-->[2,5,7,1,4,9,8];

  • 第二次:[2,5,7,1,4,9,8]中5與7比較,5<7所以不交換位置,數組變作為-->[2,5,7,1,4,9,8];

  • 第三次:[2,5,7,1,4,9,8]中7與1比較,7>1所以交換位置,數組變作為-->[2,5,1,7,4,9,8];

  • 第四次:[2,5,1,7,4,9,8]中7與4比較,7>4所以交換位置,數組變作為-->[2,5,1,4,7,9,8];

  • 第五次:[2,5,1,4,7,9,8]中7與9比較,7<9所以不交換位置,數組變作為-->[2,5,1,4,7,9,8];

  • 第六次:[2,5,1,4,7,9,8]中9與8比較,9>8所以交換位置,數組變作為-->[2,5,1,4,7,8,9];此時最大的數字9已經到了末尾。

  • 第二趟排序

  • 第一次:[2,5,1,4,7,8,9]中2與5比較,2<5所以不交換位置,數組變作為-->[2,5,1,4,7,8,9];

  • 第二次:[2,5,1,4,7,8,9]中5與1比較,5>1所以交換位置,數組變作為-->[2,1,5,4,7,8,9];

  • 第三次:[2,1,4,5,7,8,9];

  • 第四次:[2,1,4,5,7,8,9];

  • 第五次:[2,1,4,5,7,8,9];這里不需要第六次比較,因為最后一個數已知是最大的,不需要再進行比較。同理第三趟不需要第五次比較,第四趟不需要第四次比較...

  • 之后演示已無必要,喲喲切克鬧,咳咳...

我們可以發現,該算法的復雜度為:(n-1)+(n-2)+...+2+1=n(n-1)/2

演示代碼

//從小到大排序
function bubbleSort(array){
    var tem = 0;
    for (var i = 0; i < array.length; i++) {
        for (var j = 0; j < array.length-i; j++) {
            if(array[j]>array[j+1]){
                tem = array[j];
                array[j] = array[j+1];
                array[j+1] = tem;
            }
        }
    }
}

window.onload=function(){
    var array = [2,3,1,4,9,7,5];
    bubbleSort(array);
    console.log(array);
}
代碼執行結果

補充一:最近聽見很多同學在說冒泡排序的復雜度為n的平方,百度一看似乎蠻多人也是這樣認為的,看到的同學難免會有些為難究竟哪一個復雜度是正確的。

事實上,兩者都是正確的,n(n-1)/2是比較精確,而n^2則是表示該算法復雜度的數量級。
n(n-1)/2 --->
(n^2-n)/2 --->
當n足夠大時,-n的影響很小,而為了表示數量級n^2的系數1/2也去掉 --->
那么現在復雜度就是n^2了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容