輕鬆搞定Java冒泡排序算法以及算法優化

2021-01-07 願編程是詩

作為Java程式設計師,簡單的算法,必須要掌握的。尤其初級開發人員在面試過程或者筆試都會有相應算法題,今天我們講解冒泡排序算法是如何實現的以及優化方法。

何為冒泡排序

冒泡排序的基本思路:通過對待排序系列從前向後,依次比較相鄰元素的值,若發現逆序就交換,意思就是使較大的元素從前向後移,好比水低下的氣泡一樣逐漸向上冒泡,一個道理的。

冒泡排序優缺點

優點:比較簡單、空間複雜度較低、是穩定的一種排序。缺點:時間複雜度太高、效率比較慢、一輪比較都需要換位置,所以效率不高,假如現在一個數組裡面有N個數,那麼排序完成需要比較N*(N-1)/2次。

冒泡排序規則

每一趟排序的次數在逐漸減少的總的進行數組的大小減1次大的循環每一趟比較完都會有最大值出現冒泡排序實現代碼如下圖

冒泡排序的實現步驟如下圖

冒泡排序的優化

冒泡優化就是說,如果我們發現在排序過程中,沒有發生一次交換,我們可以讓它提前結束,這就是優化。當我們在排序過程,大家都知道,各元素是不斷接近自己的位置的,但是有時候排序並不是需要換位置,本身就是有順序的,這時我們在排序過程中設置一個標標記flag判斷一下元素是否進行交換(標記flag自己定義),這樣大大減少必要的比較。代碼如下圖:

總結冒泡排序核心思想

冒泡排序的比較相鄰的元素的,第一個比第二個大就要交換他們兩個的位置。冒泡排序對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,每次排序結束都會有最大值出現。冒泡排序是持續每次對越來越少的元素重複上一步的步驟的,直到最後一輪沒有比較數字就結束。冒泡排序是一個經典的排序算法,值得大家掌握,平時小的筆試都會出現。我是從事大數據、Java後端開發的,如果你也是正在考慮學習或者這學習中遇到什麼問題,可以評論區留言或者私信,感興趣的朋友可以關注我,後續會更新關於大數據、Java開發的技術文章。

相關焦點

  • Java實現冒泡排序算法
    .常用數據結構數組、鍊表、棧、隊列 散列表、二叉樹、堆 跳表、圖5.常用算法 遞歸、排序、二分查找 搜索、哈希、貪心、分治 動態規劃、字符串匹配2.考考你在上一篇:數據結構與算法系列十(排序概述)中,我們列舉了常用的排序算法,以及分析了如何綜合衡量排序算法的優劣。
  • Java中常見的排序算法有哪些?---冒泡排序
    排序相關的的基本概念排序: 將一組雜亂無章的數據按一定的規律順次排列起來。數據表( data list): 它是待排序數據對象的有限集合。排序碼(key):通常數據對象有多個屬性域,即多個數據成員組成,其中有一個屬性域可用來區分對象,作為排序依據。該域即為排序碼。
  • 排序算法之冒泡排序及其優化
    冒泡排序思想比較相鄰兩個元素,如果前面的元素比後面的元素大,則交換位置。最後一個元素必定會是最大值。排除掉最後一位元素,繼續循環,直至沒有元素需要比較可以看出,冒牌排序其實和選擇排序時很像的,只不過選擇排序是比較數據,先記錄下最小/大值的下標,等一趟循環結束的時候再交換位置;而冒泡排序在比較數據的同時也做了交換。性能時間複雜度與選擇排序一樣,時間複雜度為O(n^2)。
  • Python中的冒泡排序算法,冒泡排序的優缺點,中級python技術點
    Python中的冒泡排序算法冒泡排序是最直接的排序算法之一。它的名字來自於算法的工作方式:每經過一個新遍歷,列表中最大的元素就會向正確的位置「冒泡」。冒泡排序包括對列表進行多次遍歷、逐個比較元素以及交換順序混亂的相鄰項。
  • 排序算法總結(1):冒泡排序
    冒泡排序是一種交換排序。什麼是交換排序呢?交換排序:兩兩比較待排序的關鍵字,並交換不滿足次序要求的那對數,直到整個表都滿足次序要求為止。算法思想它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。
  • 冒泡排序算法的來龍去脈
    956年就有人開始研究冒泡排序,之後有很多人嘗試對其進行改進,但是結果令人失望。1974年圖靈獎獲得者Donald E. Knuth說:「冒泡排序除了它迷人的名字和導致了某些有趣的理論問題這一事實之外,似乎沒有什麼值得推薦的。」2 算法描述其基本思想是每次比較兩個相鄰的元素,如果它們順序錯誤就把它們交換過來。
  • 重溫7種排序算法 第一篇,交換排序算法:冒泡排序、快速排序
    排序算法可分為以下幾類:    交換排序算法:冒泡排序、快速排序;    選擇排序算法:簡單選擇排序、堆排序;    插入排序算法:直接插入排序、希爾排序;    歸併排序算法。    主要做了以上7種排序算法的筆記,字數可能較多,所以分為幾篇。
  • 經典排序算法一 冒泡排序(JAVA實現)
    冒泡排序原理:相鄰的兩個元素進行比較,將值大的元素移動到右端。冒泡排序實現思路:遍歷要排序的元素,依次比較相鄰的兩個元素,值大的移動到右端,則第二次就可以忽略第一次遍歷放在最右端的元素,依次類推直到遍歷到n-1次只剩下2個元素進行比較,冒泡排序結束。
  • 高手才能看懂的JAVA排序算法圖解
    背景排序算法是JAVA面試中經常被問到的面試題,但排序算法很多,全部記下是一件很困難的事情。現整理多種排序算法圖解幫助JAVA面試者理解和掌握排序算法,能看懂下面的算法圖解,說明你已經掌握了該排序算法。
  • 詳解JAVA數據結構與算法:排序算法
    排序算法排序也稱排序算法(Sort Algorithm),排序是將一組數據,依指定的順序進行排列的過程。排序的分類:1) 內部排序:指將需要處理的所有數據都加載到內部存儲器中進行排序。有 的算法需要佔用的臨時工作單元數與解決問題的規模 n 有關,它隨著 n 的增大而增大,當 n 較大時,將佔用較多的存儲單元,例 如快速排序和歸併排序算法就屬於這種情 況3) 在做算法分析時, 主要討論的是時間複雜度 。從用戶使用體驗上看,更看重的程序執行的速度。
  • JavaScript算法之冒泡排序
    冒泡排序是討論最多的算法之一,它比較容易理解,但是效率較低。如果數組是已排序的,冒泡排序只需要遍歷一次數組,不過最壞的情況下運行時間為 O(n2),非常低效。儘管如此,理解這個算法依然很重要,需要明白它為什麼效率低下。本文將介紹實現冒泡排序的兩個思路。
  • 輕鬆搞定,Java選擇排序算法
    前言不知不覺,今年已經大半年 時間就過去了,很多公司秋招已經開始了,然後數據結構 與算法就是公司常拿來考察同學們的基礎,今天我們一起來學習Java中最簡單的算法,叫選擇排序算法。正文選擇排序算法,是一種簡單直觀的排序算法,它的思路是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。但是注意選擇排序它是不穩定的排序方法的。
  • 單集合排序:冒泡排序法
    在日常開發中經常會遇到一類問題,就是對一個集合的數據進行排序掌握一些排序算法,對於日常開發是非常有幫助今天介紹一下冒泡排序法01算法邏輯>02時間複雜度由上圖邏輯可以得出,冒泡排序的循環次數為由循環次數可以得出,冒泡排序的時間複雜度為03空間複雜度由上圖邏輯可以得出
  • 程式設計師必備的幾種常見排序算法和搜索算法總結
    , 但是基礎還是要好好鞏固一下的.本文將以圖文的形式為大家介紹如下算法知識,希望在讀完之後大家能有所收穫:冒泡排序及其優化選擇排序插入排序歸併排序.在真實項目中我們往往不會採用冒泡排序,更多的會用快速排序或者希爾排序.關於排序算法性能問題我在《前端算法系列》如何讓前端代碼速度提高60倍有詳細介紹.
  • 看動畫學算法之:排序-冒泡排序
    簡介排序可能是所有的算法中最最基礎和最最常用的了。排序是一個非常經典的問題,它以一定的順序對一個數組(或一個列表)中的項進行重新排序。排序算法有很多種,每個都有其自身的優點和局限性。今天我們來學習最最簡單的冒泡排序算法。冒泡排序的原理冒泡排序的原理很簡單,我們想像一下一個一個的氣泡上浮的過程。
  • 排序算法問題:穩定排序與不穩定排序
    正文這幾天筆試了好幾次了,連續碰到一個關於常見排序算法穩定性判別的問題,往往還是多選,對於我以及和我一樣拿不準的同學可不是一個能輕易下結論的題目,當然如果你筆試之前已經記住了數據結構書上哪些是穩定的,哪些不是穩定的,做起來應該可以輕鬆搞定。本文是針對老是記不住這個或者想真正明白到底為什麼是穩定或者不穩定的人準備的。
  • 使用PHP完成冒泡排序算法
    原理本文使用的排序數組數據如下:$arr1 = array(18,22,12, 15,23,9);遍歷一個數組,在此過程中,將相鄰的兩個單元的值進行比較(倆倆相比,左邊比右邊大就對換位置):下方圖中所示為上面所列舉的算法過程:規律總結1.要進行從頭到尾兩兩比較並進行交換位置的趟數為$n-1趟,$n是總個數(數組長度)2.每次都對相鄰的兩個數據進行大小比較,如果需要,就交換他們的位置!
  • JS家的排序算法 十大經典算法排序總結
    佔用額外內存穩定性:排序後2個相等鍵值的順序和排序之前它們的順序相同  1   冒泡排序(Bubble Sort)冒泡排序須知:作為最簡單的排序算法之一,冒泡排序給我的感覺就像Abandon在單詞書裡出現的感覺一樣,每次都在第一頁第一位,所以最熟悉。。。
  • 一文圖解 Java 源碼的插入排序算法
    排序問題,是古老,但一直流行的問題。從 ACM 接觸到現在工作,每次涉及算法,或品讀 JDK 源碼中一些算法,經常會有排序的算法出現。資料地址:https://en.wikipedia.org/wiki/External_sorting上一篇《程序兵法:Java String 源碼的排序算法(一)》,講到了 java.lang.Comparable 接口。那麼接口是一個抽象類型,是抽象方法(compareTo)的集合,用 interface 來聲明。
  • Java、Python冒泡排序法
    冒泡排序算法思想:讓數組中的兩個相鄰數字進行比較,數組中較大的值向下沉,值小的上浮,就類似於水中的氣泡,較大的下沉,較小的上升,慢慢冒出來。簡單的說就是數值大的會慢慢往前排,數據值小的會慢慢向後排,最終實現由小到達排列,最小的排在最前,最大的排到最後。