欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

TypeScript實現(xiàn)十大排序算法之冒泡排序示例詳解

 更新時間:2023年02月23日 10:44:07   作者:coderwhy  
這篇文章主要為大家介紹了TypeScript實現(xiàn)十大排序算法之冒泡排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一. 冒泡排序的定義

冒泡排序是一種簡單的排序方法。

  • 基本思路是通過兩兩比較相鄰的元素并交換它們的位置,從而使整個序列按照順序排列。
  • 該算法一趟排序后,最大值總是會移到數(shù)組最后面,那么接下來就不用再考慮這個最大值。
  • 一直重復這樣的操作,最終就可以得到排序完成的數(shù)組。

這種算法是穩(wěn)定的,即相等元素的相對位置不會發(fā)生變化。

  • 而且在最壞情況下,時間復雜度為O(n^2),在最好情況下,時間復雜度為O(n)。

因此,冒泡排序適用于數(shù)據(jù)規(guī)模小的場景。

二. 冒泡排序的流程

冒泡排序的流程如下:

  • 從第一個元素開始,逐一比較相鄰元素的大小。
  • 如果前一個元素比后一個元素大,則交換位置。
  • 在第一輪比較結(jié)束后,最大的元素被移動到了最后一個位置。
  • 在下一輪比較中,不再考慮最后一個位置的元素,重復上述操作。
  • 每輪比較結(jié)束后,需要排序的元素數(shù)量減一,直到?jīng)]有需要排序的元素。
  • 排序結(jié)束。
  • 這個流程會一直循環(huán),直到所有元素都有序排列為止。

三. 冒泡排序的圖解

四. 冒泡排序的代碼

// 定義函數(shù),用于實現(xiàn)冒泡排序算法
function bubbleSort(arr: number[]): number[] {
  // 外層循環(huán),控制需要比較的輪數(shù)
  for (let i = 0; i < arr.length - 1; i++) {
    // 內(nèi)層循環(huán),控制每輪需要比較的次數(shù)
    for (let j = 0; j < arr.length - 1 - i; j++) {
      // 如果前一個元素比后一個元素大,則交換它們的位置
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
      }
    }
  }
  // 返回排序后的數(shù)組
  return arr;
}
// 測試代碼
const arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48];
console.log(bubbleSort(arr));
// 輸出:[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

說明:

  • 冒泡排序是一種暴力枚舉算法,通過多次循環(huán)比較相鄰的元素,把最大的元素逐漸冒泡到數(shù)組末端。
  • 外層循環(huán):控制排序的趟數(shù),每一輪排序會把最大的元素放到最后,因此每次循環(huán)需要比較的元素個數(shù)也會逐漸減少。
  • 內(nèi)層循環(huán):比較相鄰元素,如果左邊元素比右邊元素大,則交換位置。
  • 冒泡排序是一種時間復雜度較高的算法,一般不用于大數(shù)據(jù)量的排序,但它很容易理解,是一種初學者學習排序算法的好

五. 冒泡排序的時間復雜度

在冒泡排序中,每次比較兩個相鄰的元素,并交換他們的位置,如果左邊的元素比右邊的元素大,則交換它們的位置。這樣的比較和交換的過程可以用一個循環(huán)實現(xiàn)。

  • 在最好的情況下,數(shù)組已經(jīng)是有序的,那么比較和交換的次數(shù)是最少的。
  • 在這種情況下,比較次數(shù)是n-1次,交換次數(shù)是0次,其中n是數(shù)組的長度。
  • 在最壞的情況下,數(shù)組是逆序的,那么比較和交換的次數(shù)是最多的。
  • 在這種情況下,比較次數(shù)是n-1次,交換次數(shù)是n(n-1)/2次,其中n是數(shù)組的長度。
  • 在平均情況下,比較和交換的次數(shù)取決于數(shù)組的排列方式。
  • 一般來說,平均情況下比較次數(shù)是n-1次,交換次數(shù)是n(n-1)/4次,其中n是數(shù)組的長度。

冒泡排序的時間復雜度分析:

  • 最好情況:當序列已經(jīng)有序,每次比較和交換操作都不會進行,只需要進行n-1次比較,時間復雜度為O(n)。
  • 最壞情況:當序列完全逆序,需要進行n-1輪比較和n-1次交換操作,時間復雜度為O(n^2)。
  • 平均情況:需要進行的比較和交換操作的次數(shù)在所有情況中的平均值,時間復雜度也是O(n^2)。

由此可見,冒泡排序的時間復雜度主要取決于數(shù)據(jù)的初始順序,最壞情況下時間復雜度是O(n^2),不適用于大規(guī)模數(shù)據(jù)的排序。

六. 冒泡排序的總結(jié)

  • 冒泡排序適用于數(shù)據(jù)規(guī)模較小的情況,因為它的時間復雜度為O(n^2),對于大數(shù)據(jù)量的排序會變得很慢。
  • 同時,它的實現(xiàn)簡單,代碼實現(xiàn)也容易理解,適用于學習排序算法的初學者。
  • 但是,在實際的應用中,冒泡排序并不常用,因為它的效率較低。
  • 此外,冒泡排序比較和交換的次數(shù)較多,占用更多的存儲空間和時間,不適用于處理大數(shù)據(jù)量的情況。
  • 因此,在實際應用中,冒泡排序通常被更高效的排序算法代替,如快速排序、歸并排序等。

以上就是TypeScript實現(xiàn)十大排序算法之冒泡排序示例詳解的詳細內(nèi)容,更多關于TypeScript冒泡排序算法的資料請關注腳本之家其它相關文章!

相關文章

  • TypeScript交叉運算的算法示例解析

    TypeScript交叉運算的算法示例解析

    這篇文章主要為大家介紹了TypeScript交叉運算的算法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • TypeScript數(shù)據(jù)結(jié)構(gòu)之隊列結(jié)構(gòu)Queue教程示例

    TypeScript數(shù)據(jù)結(jié)構(gòu)之隊列結(jié)構(gòu)Queue教程示例

    這篇文章主要為大家介紹了TypeScript數(shù)據(jù)結(jié)構(gòu)之隊列結(jié)構(gòu)Queue教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • TypeScript保姆級基礎教程

    TypeScript保姆級基礎教程

    這篇文章主要為大家介紹了TypeScript保姆級基礎教程示例詳解,主要為大家介紹了typescript的類型,函數(shù),對象,接口等基礎示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-07-07
  • Three.js引入Cannon.js及使用示例詳解

    Three.js引入Cannon.js及使用示例詳解

    這篇文章主要為大家介紹了Three.js引入Cannon.js及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Nest框架中集成使用Swagger示例說明

    Nest框架中集成使用Swagger示例說明

    這篇文章主要為大家介紹了Nest框架中集成使用Swagger的示例說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • TypeScript中的聯(lián)合類型使用示例詳解

    TypeScript中的聯(lián)合類型使用示例詳解

    這篇文章主要為大家介紹了TypeScript中的聯(lián)合類型使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • typescript在vue中的入門案例代碼demo

    typescript在vue中的入門案例代碼demo

    這篇文章主要介紹了typescript在vue中的入門案例代碼demo,使用技術棧vue2+typescript+scss入門練手項目,天氣預報demo,需要的朋友可以參考下。
    2022-12-12
  • TypeScript十大排序算法之選擇排序?qū)崿F(xiàn)示例詳解

    TypeScript十大排序算法之選擇排序?qū)崿F(xiàn)示例詳解

    這篇文章主要為大家介紹了TypeScript十大排序算法之選擇排序?qū)崿F(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • TypeScript使用noImplicitAny實戰(zhàn)解析

    TypeScript使用noImplicitAny實戰(zhàn)解析

    這篇文章主要為大家介紹了TypeScript使用noImplicitAny實戰(zhàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • typescript快速上手的進階類型與技術

    typescript快速上手的進階類型與技術

    本文講述了typescript開發(fā)的一些高級的類型與技術,算是對于基礎知識點的補充,具體內(nèi)容包括:比如元組、枚舉類、接口、泛型相關概念等。雖說是進階,但是內(nèi)容不算多也并不難理解。
    2022-12-12

最新評論