国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

排序算法之詳解冒泡排序

這篇具有很好參考價值的文章主要介紹了排序算法之詳解冒泡排序。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

引入

  • 冒泡排序顧名思義,就是像冒泡一樣,泡泡在水里慢慢升上來,由小變大。
  • 雖然冒泡排序和冒泡并不完全一樣,但卻可以幫助我們理解冒泡排序。

思路

  • 一組無序的數(shù)組,要求我們從小到大排列
    1. 我們可以先將最大的元素放在數(shù)組末尾
    2. 再將第二大的數(shù)放在數(shù)組的倒數(shù)第二個位置
    3. 再將第三大的數(shù)放在數(shù)組的倒數(shù)第三個位置
    4. 以此類推
  • 那么現(xiàn)在問題的關鍵就是如何將 第 n 大的數(shù) 放在 倒數(shù)第 n 個位置 ---> 交換
  • 下面是冒泡排序的gif動畫,該圖來自于菜鳥教程
    排序算法之詳解冒泡排序

實現(xiàn)

提醒

  • 現(xiàn)在我們假設無序數(shù)組長度為 n 即下標 [ 0 , n-1 ]
  • 當前元素下標為 i ,下一個元素的下標為 j

第一次遍歷 [ 0 , n - 1- 1 ] ---> [ 0 , n -2 ]

  • 如果 當前元素 > 后一個元素 ,那么就交換兩個元素 , 再進行下次遍歷
  • 如果 當前元素 > 后一個元素 , 直接進行下次遍歷
  • 直到遍歷完成之后,最大的值就在一次一次的交換中被交換到了數(shù)組末尾
  • 思考:為什么是從 0 開始遍歷 ,n-2 結束 ?
    1. 因為 j 為 i 的下一個元素下標 ,如果為 [ 0,n-1 ]的話 ,那么當前元素下標就可以為 n - 1,那么下一個元素的下標就為 n ,顯然數(shù)組下標越界了
    2. 而且正因為是從 [ 0 , n -2] 范圍遍歷 ,剛好可以保證經過這一輪遍歷后 ,最大的數(shù)在數(shù)組末尾 ( i = n - 2 【即為倒數(shù)第二個數(shù)】 ,j = i + 1【末尾數(shù)】)

第二次遍歷 [ 0 , n - 1- 2]----> [ 0 , n -3 ]

  • 經過第一次遍歷,我們已經將最大的數(shù)移動到了數(shù)組末尾,所以,我們不用在去對末尾以確定的數(shù)進行比較,我們可以減少次數(shù),來提高效率
  • 再次引用第一次遍歷的步驟

......
最后一次遍歷 [ 0 , n - 1 - (n-1) ] ---- > [ 0 , 0 ]

  • 最后一次遍歷的情況就是還剩下兩個元素未進行排序的情況 ,即下標 0 和 下標 1 未進行排序
  • 只需對這兩個元素進行排序后,就完成了這個數(shù)組的排序

怎么確定一共需要遍歷幾次及每次遍歷的數(shù)組下標范圍文章來源地址http://www.zghlxwxcb.cn/news/detail-424720.html

  • 遍歷次數(shù)問題
    • 我們先來做一個假設
      • 如果一個數(shù)組只有兩個元素,那么應該遍歷幾次 ? 1 次
      • 如果一個數(shù)組只有三個元素,那么應該遍歷幾次 ? 2次
        • 第一次將最大的數(shù)放在最末尾 ,第二次將第二大的數(shù)放在倒數(shù)第二 , 第三大的元素自然而然就在倒數(shù)第三了【即第一個】 ,不用遍歷
      • 如果一個數(shù)組只有四個元素,那么應該遍歷幾次 ? 3 次
        • 第一次將最大的數(shù)放在最末尾 ,第二次將第二大的數(shù)放在倒數(shù)第二 , 第三次將第三大的元素放在在倒數(shù)第三 ,剩下一個元素,不用排
      • 顯而易見,如果有 n 個 元素 ,那么就需要遍歷 n - 1 次
  • 每次遍歷數(shù)組下標
    • 按照上面的實現(xiàn)部分
      • 第一次遍歷我們需要數(shù)組的下標為 [ 0 , n -2 ]
      • 第二次遍歷我們需要數(shù)組的下標為 [ 0 , n -3 ]
      • 第三次遍歷我們需要數(shù)組的下標為 [ 0 , n -4 ]
    • 那么就有一個規(guī)律了 ,n - 2 , n - 3 , n - 4
      • 當我們正在進行第一次遍歷時,用一個變量保存 m = 1 , 那么第一次遍歷下標可以為 [ 0 , n -1 - m ]
      • 當我們正在進行第二次遍歷時,用一個變量保存 m = 2 , 那么第一次遍歷下標可以為 [ 0 , n -1 - m ]
      • 當我們正在進行第三次遍歷時,用一個變量保存 m = 3 , 那么第一次遍歷下標可以為 [ 0 , n -1 - m ]
      • 當我們正在進行最后一次遍歷時,用一個變量保存 m = n - 1, 那么第一次遍歷下標可以為 [ 0 , n -1 - m ] ---> [ 0 , n - 1 - (n -1) ]

代碼實現(xiàn)

// 冒泡排序算法
public static int[] bubble(int[] ints){
    // 注意我這里使用的是 <  , 而不是我思路中的  <= , 可以自行更改 ,如果沒想明白說明你還沒有理解
    // 用 i 來表示一共需要遍歷多少次
    for (int i = 0; i < ints.length-1; i++) {
        // 真正開始進行遍歷 ,根據(jù) i 的值 不同 ,j 就不同 ,也就是說每次大遍歷中小遍歷的次數(shù)不同
        for (int j = 0; j < ints.length-1-i; j++) {
            // 如果前一個元素 >  后一個元素 ,則交換
            if (ints[j] > ints[j+1]){
                int temp = ints[j];
                ints[j] = ints[j+1];
                ints[j+1] = temp;
            }
            // 繼續(xù)下次遍歷
        }
    }
    return ints;
}

到了這里,關于排序算法之詳解冒泡排序的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 排序算法中的冒泡和選擇排序詳解(持續(xù)更新系列)

    排序算法中的冒泡和選擇排序詳解(持續(xù)更新系列)

    本系列文章為Java基礎入門內容,致力于為大家詳細講解學習Java中的一些難點、常見點等,內容由淺入深。 文末有全文重點總結及配套視頻資料,更多相關技術問題歡迎和我們一起交流討論!更多學習資料可點這里獲取 我們要想成為一個優(yōu)秀的程序員,其實非常關鍵的一點就

    2024年02月07日
    瀏覽(19)
  • 【數(shù)據(jù)結構】詳解七大排序算法(直接插入排序、希爾排序、直接選擇排序、堆排序、冒泡排序、快速排序)

    【數(shù)據(jù)結構】詳解七大排序算法(直接插入排序、希爾排序、直接選擇排序、堆排序、冒泡排序、快速排序)

    1、基本思想 ???把待排序的數(shù)按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中,直到所以的記錄插入完為止,得到一個新的有序序列。 ???實際中我們玩撲克牌時,就用到了插入排序的思想 基本步驟: ???當插入第i個元素時,前面的arr[0]、arr[2]…arr

    2024年02月04日
    瀏覽(109)
  • C語言入門:冒泡法排序、交換法排序和選擇法排序算法的詳解(代碼分析)

    C語言入門:冒泡法排序、交換法排序和選擇法排序算法的詳解(代碼分析)

    ?冒泡法排序 :顧名思義,小的數(shù)據(jù)就好像水中的氣泡一樣總是逐漸往上升, 大的數(shù)據(jù)就像石塊一樣往下沉,因此稱為冒泡法排序法。 假如有n個數(shù)字,則需要進行n-1輪? 第一輪結果:最大的數(shù),被放在了最后一位 ?第二輪:元素 ‘8’ 已經拍好了順序,所以只用將前4個元素

    2024年02月03日
    瀏覽(18)
  • 詳解八大排序算法-附動圖和源碼(插入,希爾,選擇,堆排序,冒泡,快速,歸并,計數(shù))

    詳解八大排序算法-附動圖和源碼(插入,希爾,選擇,堆排序,冒泡,快速,歸并,計數(shù))

    目錄 ??一.排序的概念及應用?? ?1.排序的概念 ?2.排序的應用 ?3.常用的排序算法 ??二.排序算法的實現(xiàn)?? 1.插入排序 1.1直接插入排序 1.2希爾排序(縮小增量排序) 2.選擇排序 2.1直接選擇排序 2.2堆排序 3.比較排序 3.1冒泡排序 3.2快速排序? 遞歸版本 快速排序遞歸優(yōu)化 快速

    2024年02月01日
    瀏覽(16)
  • C語言實現(xiàn)八大排序算法(詳解插入排序、希爾排序、選擇排序、堆排序、冒泡排序、快速排序(遞歸和非遞歸)、歸并排序(遞歸和非遞歸)和計數(shù)排序)

    C語言實現(xiàn)八大排序算法(詳解插入排序、希爾排序、選擇排序、堆排序、冒泡排序、快速排序(遞歸和非遞歸)、歸并排序(遞歸和非遞歸)和計數(shù)排序)

    本篇文章使用C語言實現(xiàn)了數(shù)據(jù)結構中常見的八大排序算法,它們分別是 插入排序、希爾排序、選擇排序、堆排序、冒泡排序、快速排序、歸并排序和計數(shù)排序 。在排序算法的實現(xiàn)過程中,每種算法都有其獨特的特點和適用場景。插入排序通過逐步構建有序序列來排序,希爾

    2024年01月24日
    瀏覽(23)
  • 【數(shù)據(jù)結構與算法】排序算法:冒泡排序,冒泡排序優(yōu)化,選擇排序、選擇排序優(yōu)化

    【數(shù)據(jù)結構與算法】排序算法:冒泡排序,冒泡排序優(yōu)化,選擇排序、選擇排序優(yōu)化

    目錄 一、冒泡排序 1、冒泡排序思想 2、冒泡排序算法的性能分析 代碼實現(xiàn): 二、選擇排序 1、選擇排序思想 2、選擇排序算法的性能分析? 代碼實現(xiàn): 1、冒泡排序思想 冒泡排序的基本思想是通過相鄰元素之間的比較和交換來逐步將最大(或最小)的元素移到右邊(或左邊

    2024年01月19日
    瀏覽(26)
  • C++常見排序算法——冒泡排序算法

    首先說一下冒泡排序的基本算法思想: 它重復地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序(如從大到小、首字母從Z到A)錯誤就把他們交換過來。 這個算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數(shù)列的頂端(升序或降序排列),就如同碳酸

    2023年04月08日
    瀏覽(24)
  • 排序算法:冒泡排序

    冒泡排序是入門級的算法,但也有一些有趣的玩法。通常來說,冒泡排序有三種寫法: 一邊比較一邊向后兩兩交換,將最大值 / 最小值冒泡到最后一位; 經過優(yōu)化的寫法:使用一個變量記錄當前輪次的比較是否發(fā)生過交換,如果沒有發(fā)生交換表示已經有序,不再繼續(xù)排序;

    2024年02月11日
    瀏覽(19)
  • 常見排序算法之冒泡排序

    常見排序算法之冒泡排序

    顧得泉: 個人主頁 個人專欄: 《Linux操作系統(tǒng)》??《C/C++》??《LeedCode刷題》 鍵盤敲爛,年薪百萬! ??????? 冒泡排序,英文名Bubble?Sort,是一種相對基礎的 交換排序 方法。這種排序算法的名字來源于它操作的過程,可以類比為數(shù)列中的每一個元素都可以像小氣泡一樣

    2024年02月05日
    瀏覽(16)
  • 排序算法之冒泡排序(圖解)

    排序算法之冒泡排序(圖解)

    冒泡排序 (英語: Bubble Sort )又稱為 泡式排序 ,是一種簡單的排序算法。它重復地走訪過要排序的數(shù)列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數(shù)列的工作是重復地進行直到沒有再需要交換,也就是說該數(shù)列已經排序完成。這個算法的名字由來是

    2023年04月19日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包