冒泡排序算法(JavaScript實現)

算法流程

比較相鄰的元素,如果第一個比第二個大,就交換,從第一對元素開始到最后一對元素做同樣的工作,每次都重復以上步驟,當遍歷arr.length-1次后,遍歷完所有的元素

復雜度

時間復雜度為:O(n^2)

代碼實現

代碼:

function bubbleSort(arr){
  for(var i = 0; i < arr.length-1; i++){
    for(var j = 0;j < arr.length-i;j++){
      if(arr[j] > arr[j+1]){
        var t = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = t;
      }
    }
  }
  
  return arr;
}

var arr = [1,4,2,5,3];
bubbleSort(arr); // [1 , 2 , 3 , 4 , 5]
算法優化

當待排序數組為[1, 3, 4, 5, 6, 7, 8, 9, 2]時:
第1趟排序的結果為: 1 2 3 4 5 6 7 8 9
此時其實序列已經完成,但是根據上述代碼仍得繼續遍歷,直至第9趟排序。這顯然是不合理的,如果我們能在代碼中加入一個flag標記上一趟排序中是否進行過交換,如果進行過未進行交換,說明當前數組以及有序。
代碼如下:

function bubbleSort(arr){
  var flag = true;
  while(true){
    flag = false;
    for(var i = 0; i < arr.length-1; i++){
      for(var j = 0;j < arr.length-i;j++){
        if(arr[j] > arr[j+1]){
          var t = arr[j];
          arr[j] = arr[j+1];
          arr[j+1] = t;
          flag = true;
        }
      }
    } 
  }
  
  return arr;
}

var arr = [1, 3, 4, 5, 6, 7, 8, 9, 2];
bubbleSort(arr);  //[1, 2, 3, 4, 5, 6, 7, 8, 9]
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 某次二面時,面試官問起Js排序問題,吾絞盡腦汁回答了幾種,深感算法有很大的問題,所以總計一下! 排序算法說明 (1...
    流浪的先知閱讀 1,214評論 0 4
  • Ba la la la ~ 讀者朋友們,你們好啊,又到了冷鋒時間,話不多說,發車! 1.冒泡排序(Bub...
    王飽飽閱讀 1,816評論 0 7
  • 人生得失并存,你擁有了清風,就要交還明月。時光不會逆轉,一旦選擇了,就沒有回頭。
    小丸子與草裙閱讀 248評論 0 0
  • 今天,我讀了王一方的----通往純粹的羊腸小道這篇文章,讀后思潮翻滾,激動不已。文章所寫的施韋澤原是一位哲學神學雙...
    小泥蛋兒閱讀 154評論 0 0
  • 今晚的讀書會如期而至。可能因為在外面,沒Wi-Fi,QQ出現故障,開始進入聊天室時我能聽到語音,但無法看到大...
    美廷閱讀 280評論 0 0