JavaScript算法之冒泡排序

2021-01-07 小象Web開發

冒泡排序是討論最多的算法之一,它比較容易理解,但是效率較低。如果數組是已排序的,冒泡排序只需要遍歷一次數組,不過最壞的情況下運行時間為 O(n2),非常低效。

儘管如此,理解這個算法依然很重要,需要明白它為什麼效率低下。

本文將介紹實現冒泡排序的兩個思路。

思路1

遍歷數組,相鄰的兩個元素之間進行相互比較如果當前元素大於下個元素,交換它們否則,把指針繼續移動,然後對比接下來兩個元素遍歷到了數組結尾時,我們知道最大的元素已經位於數組最後的位置了重複上述過程N次,N是數組的長度,直至排序完成

實現代碼如下:

上面的代碼中,我們用了兩個嵌套循環,外層循環每運行一次,指針 j 都會減一,因為我們知道該位置的值已經排序了。

思路2

遍歷數組,臨近的元素相互比較大小如果當前元素比下個元素大,則交換它們標記交換操作已發生如果交換操作已發生,則再次遍歷該數組當沒有交換操作發生時,我們就知道該數組排序已完成

在上述代碼中,我們只需要一個指針即可。我們用了一個變量來存儲布爾值,用於標示是否發生了交換操作。和思路1不同的地方是,我們每次都要對比數組中所有的元素。

複雜度

平均時間複雜度是 O(n 2)。

相關焦點

  • JavaScript中的簡單排序算法
    我還建議將TopTal的排序算法動畫或Visualgo的排序部分加入書籤,以便在閱讀本文時可視化這些算法並在整個編程過程中提供幫助。記住,程式設計師最好的朋友是網際網路!交換助手方法所有這些算法都涉及交換數組中的元素。為了更好地理解算法的工作原理,我們將抽象出一個稱為「交換」的可重用函數。「交換」接收一個數組,並交換該數組的兩個索引。
  • JavaScript面經之冒泡排序
    文/大白老師圖/大白老師我們去大廠面試前端的時候,最容易被問及的一個內容就是排序,而其中,冒泡排序作為最基礎的排序算法,很多時候是被要求進行手寫代碼的,面試官通過對手寫代碼的考察,可以看出求職者的算法基礎功底、JavaScript語言功底以及在開發時,對變量的語義化水平
  • JavaScript實現九種排序算法
    1.插入排序最普通的排序算法, 從數組下標1開始每增1項排序一次,越往後遍歷次數越多;原理圖:代碼:// 插入排序 從下標1開始每增1項排序一次,越往後遍歷次數越多很常見很容易理解的排序算法, 排序思路:遍歷數組,每次遍歷就將最大(或最小)值推至最前。
  • 排序算法之冒泡排序及其優化
    冒泡排序思想比較相鄰兩個元素,如果前面的元素比後面的元素大,則交換位置。最後一個元素必定會是最大值。排除掉最後一位元素,繼續循環,直至沒有元素需要比較可以看出,冒牌排序其實和選擇排序時很像的,只不過選擇排序是比較數據,先記錄下最小/大值的下標,等一趟循環結束的時候再交換位置;而冒泡排序在比較數據的同時也做了交換。性能時間複雜度與選擇排序一樣,時間複雜度為O(n^2)。
  • Java實現冒泡排序算法
    .常用數據結構數組、鍊表、棧、隊列 散列表、二叉樹、堆 跳表、圖5.常用算法 遞歸、排序、二分查找 搜索、哈希、貪心、分治 動態規劃、字符串匹配2.考考你在上一篇:數據結構與算法系列十(排序概述)中,我們列舉了常用的排序算法,以及分析了如何綜合衡量排序算法的優劣。
  • 冒泡排序算法的來龍去脈
    956年就有人開始研究冒泡排序,之後有很多人嘗試對其進行改進,但是結果令人失望。1974年圖靈獎獲得者Donald E. Knuth說:「冒泡排序除了它迷人的名字和導致了某些有趣的理論問題這一事實之外,似乎沒有什麼值得推薦的。」2 算法描述其基本思想是每次比較兩個相鄰的元素,如果它們順序錯誤就把它們交換過來。
  • Python中的冒泡排序算法,冒泡排序的優缺點,中級python技術點
    Python中的冒泡排序算法冒泡排序是最直接的排序算法之一。它的名字來自於算法的工作方式:每經過一個新遍歷,列表中最大的元素就會向正確的位置「冒泡」。冒泡排序包括對列表進行多次遍歷、逐個比較元素以及交換順序混亂的相鄰項。
  • 排序算法總結(1):冒泡排序
    冒泡排序是一種交換排序。什麼是交換排序呢?交換排序:兩兩比較待排序的關鍵字,並交換不滿足次序要求的那對數,直到整個表都滿足次序要求為止。算法思想它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。
  • 重溫7種排序算法 第一篇,交換排序算法:冒泡排序、快速排序
    排序算法可分為以下幾類:    交換排序算法:冒泡排序、快速排序;    選擇排序算法:簡單選擇排序、堆排序;    插入排序算法:直接插入排序、希爾排序;    歸併排序算法。    主要做了以上7種排序算法的筆記,字數可能較多,所以分為幾篇。
  • JavaScript實現排序算法
    如4N^2^,大O表示法表示為:O(N^2^);二、排序算法這裡主要介紹幾種簡單排序和高級排序:簡單排序:冒泡排序、選擇排序、插入排序;高級排序:希爾排序、快速排序;此處創建一個列表類ArrayList並添加一些屬性和方法,用於存放這些排序方法:1.冒泡排序冒泡排序的思路:對未排序的各元素從頭到尾依次比較相鄰的兩個元素大小關係;如果左邊的人員高
  • Java中常見的排序算法有哪些?---冒泡排序
    排序相關的的基本概念排序: 將一組雜亂無章的數據按一定的規律順次排列起來。數據表( data list): 它是待排序數據對象的有限集合。排序碼(key):通常數據對象有多個屬性域,即多個數據成員組成,其中有一個屬性域可用來區分對象,作為排序依據。該域即為排序碼。
  • 輕鬆搞定Java冒泡排序算法以及算法優化
    作為Java程式設計師,簡單的算法,必須要掌握的。尤其初級開發人員在面試過程或者筆試都會有相應算法題,今天我們講解冒泡排序算法是如何實現的以及優化方法。何為冒泡排序冒泡排序的基本思路:通過對待排序系列從前向後,依次比較相鄰元素的值,若發現逆序就交換,意思就是使較大的元素從前向後移,好比水低下的氣泡一樣逐漸向上冒泡,一個道理的。冒泡排序優缺點優點:比較簡單、空間複雜度較低、是穩定的一種排序。
  • 看動畫學算法之:排序-冒泡排序
    簡介排序可能是所有的算法中最最基礎和最最常用的了。排序是一個非常經典的問題,它以一定的順序對一個數組(或一個列表)中的項進行重新排序。排序算法有很多種,每個都有其自身的優點和局限性。今天我們來學習最最簡單的冒泡排序算法。冒泡排序的原理冒泡排序的原理很簡單,我們想像一下一個一個的氣泡上浮的過程。
  • HTML5技術分享 JavaScript 排序算法
    基本上,排序算法的輸出必須遵守下列兩個原則:  輸出結果為遞增序列(遞增是針對所需的排序順序而言)  輸出結果是原輸入的一種排列、或是重組  雖然排序算法是一個簡單的問題,但是從計算機科學發展以來,在此問題上已經有大量的研究。舉例而言,冒泡排序在1956年就已經被研究。雖然大部分人認為這是一個已經被解決的問題,有用的新算法仍在不斷的被發明。
  • JavaScript 數據結構與算法之美 - 十大經典排序算法匯總(上)
    筆者寫的 JavaScript 數據結構與算法之美系列用的語言是 JavaScript ,旨在入門數據結構與算法和方便以後複習。文中包含了十大經典排序算法的思想、代碼實現、一些例子、複雜度分析、動畫、還有算法可視化工具。
  • 你所知道的十大排序算法的總結(冒泡,選擇,插入,希爾,歸併,快排,堆...
    一、前言傳統的計算機算法和數據結構領域,都是基於java或者c/c++等。沒用javascript實現過或是沒仔細看過相關算法的原理,導致寫起來浪費很多時間。對於一個前端來說,尤其是筆試面試的時候,算法方面考的其實不難(十大排序算法或是和十大排序算法同等難度的)。
  • 如何理解JavaScript中常用的4種排序算法?
    冒泡排序冒泡排序是我們在編程算法中,算是比較常用的排序算法之一,在學習階段,也是最需要接觸理解的算法,所以我們放在第一個來學習。算法介紹:比較相鄰的兩個元素,如果前一個比後一個大,則交換位置。第一輪把最大的元素放到了最後面。
  • 常用排序算法之JavaScript實現
    1、插入排序插入排序(Insertion-Sort)的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),因而在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。
  • JavaScript數組 - 冒泡排序
    冒泡排序這節我們來講大名鼎鼎的冒泡排序原理:前後兩個數兩兩進行比較,如果符合交換條件,交換位置,知道所有數據排序完成,結束比較。舉個小例子:我們來給9,8,7,6,5,4,排序為4,5,6,7,8,9排序比較的過程:第一輪:接著進行第二輪的排序比較:(9在最大位置上,所以在接下來的幾輪裡不跟著參與)再進行第三輪的排序比較(這一輪的8在最大位置,以後也不再參與)依次類推…經過上面的每一輪比較
  • 單集合排序:冒泡排序法
    在日常開發中經常會遇到一類問題,就是對一個集合的數據進行排序掌握一些排序算法,對於日常開發是非常有幫助今天介紹一下冒泡排序法01算法邏輯>02時間複雜度由上圖邏輯可以得出,冒泡排序的循環次數為由循環次數可以得出,冒泡排序的時間複雜度為03空間複雜度由上圖邏輯可以得出