日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构与算法-----冒泡排序

發布時間:2023/12/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构与算法-----冒泡排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  冒泡排序的基本思想,就是相鄰的兩個數字進行比較,如果它們的順序錯誤,就把它們交換過來。什么是順序錯誤呢?比如我們按從大到小進行排列,那么應該是大的數在前面,小的數在后面,兩個數如果是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趟比較?,F在再看每一趟中的內部比較。

    在第一趟中,我們經過了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));

   結果如下,排序沒有問題

?

轉載于:https://www.cnblogs.com/SamWeb/p/7827475.html

總結

以上是生活随笔為你收集整理的数据结构与算法-----冒泡排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。