資料結構與演算法-----冒泡排序

來源:互聯網
上載者:User

標籤:數組   迴圈   style   排列   數字   bubble   png   冒泡排序   完成   

  冒泡排序的基本思想,就是相鄰的兩個數字進行比較,如果它們的順序錯誤,就把它們交換過來。什麼是順序錯誤呢?比如我們按從大到小進行排列,那麼應該是大的數在前面,小的數在後面,兩個數如果是45,98這麼排列,它們就是順序錯誤,我們就要把它們交換過來,變為45,98;

  現在我們就按照上面的基本思想,對5個數12, 35, 99, 8, 100進行降序排列。

    1, 首先比較第1個數和第2個數:12,35,由於是降序排列,越小的數應該越在後面, 而在這裡12 比35小,卻排在了前面, 不符合要求,就是順序錯誤,我們要把它們交換過來,經過交換之後,變成了 35, 12, 99, 8, 100;

    2, 現在再比較第2個數和第3個數: 12,99,由於12 還是小於99, 確排在前面,我們仍要調換它們的位置, 調換之後為35, 99, 12, 8, 100;

    3, 再比較第3個數和第4個數; 12, 8: 12 > 8 , 符合小的在後面的原則,不用調換位置。

    4, 最後比較第4個數和第5個數: 8 和100, 調換它們的位置 35, 99, 12, 100, 8;

  經過這4次比較,我們把最小的數字8找出來了,並放到了最後。但是僅僅找出了一個最小的數。我們還是需要進行排序,還是要按照上面的兩兩比較方法,

  現在再進行一次排序:

    1,比較第1個數和第2個數:35, 99, 由於35 < 99, 不符合越小的數越在後面的原則,所以交換它們的位置: 99, 35, 12, 100, 8;

    2, 比較第2個和第3個數:35,12; 可以看到,它們不用交換位置

    3, 比較第3個數和第4個數: 12, 100,需要交換它們的位置 99, 35, 100, 12, 8;

  注意,這裡就不用再去比較第4位和第5位元了,因為在上面的第一次比較中,8已經是最小的數了。

  這裡只經過3個比較,找出的第二小的數。

  接著進行排序, 還是要兩兩比較,找出第三小的數

    1, 比較第1個數和第2個數: 99,35, 不需要交換它們的位置。

    2, 再比較第2個數和第3個數: 35, 100, 需要交換它們的位置 99,100, 35,12,8

  經過2個比較,我們找出了第3小的數,35; 

  還是需要進行一個比較,找出第4小的數字,

    只需要比較第1個數和第2個數, 99,100,交換它們的位置。100,99,35, 12, 8

  這裡只需要比較1次,就可以完成任務了。

     最終排序完成。100,99,35, 12, 8

   上面的排序過程,我們發現大的比較,一共發生了四次,每一次,我們稱之為一趟。而每一趟只確定一個數進行歸位。

  現在對上面的過程進行抽象一下: 我們一共5個數,共進行了4趟比較, 也就是說,如果我們有n個數, 我們要經曆n-1趟比較。現在再看每一趟中的內部比較。

    在第一趟中,我們經過了4次比較,在第二趟中,我們經過了3次比較,

    在第三趟中,我們經過了2次比較,在第四趟中,我們經過了1次比較

  可以發現 趟數 + 比較次數 = 總共的個數。我們確定了趟數i, 用總數n 減去趟數就可以了。

   現在就可以用程式寫一下。由於每次都是兩兩比較,所以我們要確定一個變數i, 比較完一次後,讓它自動加1,以便進行下次比較,這就是迴圈。當然我們還要確定多少個數字,以便確認比較多少次。長度加上迴圈, 用數組是最好不過的了。

function bubbleSort (arr) {  let newArray = arr.slice();   // 函數式編程的思想,不要對外部的變數進行改變。  let n = newArray.length;      // 數組的長度,從而確定比較多少趟   // 冒泡排序核心,首先要比較n- 1趟,因為每一趟只能確定一個數字   for(let i = 0; i< n -1; i++) {        for(let j =0; j< n - i; j++) {// 每一趟內部進行兩兩比較,而比較的次數就是 n -i             // 如果順序錯誤,就交換它們的位置             if(newArray[j] < newArray[j + 1]) {                 let temp = newArray[j];                 newArray[j] = newArray[j+1];                 newArray[j+1] = temp;             }     }  }  return newArray;}

  把 我們上面排序的5個數放入數組中,然後傳入到bubbleSort 函數中

  let array = [12, 35, 99, 8, 100]; console.log("排序前的數組:" + array); console.log("排序後的數組:" +bubbleSort(array));

   結果如下,排序沒有問題

 

資料結構與演算法-----冒泡排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.