0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺析圖解算法之冒泡排序

Linux愛好者 ? 來源:小K算法 ? 作者:小K算法 ? 2021-06-08 16:43 ? 次閱讀

03 冒泡排序 為描述方便,用下面的數(shù)組模擬小朋友的交換過程。 核心思想(升序):

從首位置開始,依次比較前后兩個數(shù),如果前面的數(shù)比后面的數(shù)大,就交換兩個數(shù)。這樣第1輪結(jié)束后,最大的數(shù)就會移動到最后的位置。對剩余元素重復(fù)執(zhí)行N-1次,整個數(shù)組有序。因?yàn)橄窨諝馍细〉剿?,最大的元素會慢慢浮到最后,所以冒泡因此得名?/p>

3.1 第1輪 執(zhí)行完成后,最大的元素歸位。

3.2 第2輪 第2輪接著對前面剩余的N-1個元素重復(fù)上面步驟,第2大的元素歸位。

3.3 第3輪 第3輪對前面剩余的N-2個元素重復(fù)上面步驟,第3大的元素歸位。 總共執(zhí)行N-1次操作,所有元素歸位。

3.4 代碼實(shí)現(xiàn)

for (int i = 0; i 《 n - 1; ++i) { for (int j = 0; j 《 n - i - 1; ++j) { if (a[j] 》 a[j + 1]) { swap(a[j], a[j + 1]); } } } 04 問題及優(yōu)化

4.1 迭代輪次優(yōu)化 如果原數(shù)組為如下情況,那么在執(zhí)行完第1輪后,整個數(shù)組已經(jīng)有序,后面的輪次沒必要執(zhí)行,可以針對這種情況做一次優(yōu)化改進(jìn)。 改進(jìn)點(diǎn)1: 如果某一輪沒有發(fā)生過交換,說明數(shù)組已經(jīng)有序,那么以后也不會發(fā)生交換,此時可以終止迭代。 代碼實(shí)現(xiàn)

for (int i = 0; i 《 n - 1; ++i) { // flag標(biāo)記是否有交換 bool flag = true; for (int j = 0; j 《 n - i - 1; ++j) { if (a[j] 》 a[j + 1]) { swap(a[j], a[j + 1]); flag = false; } } if (flag) { break; } }

4.2 掃描范圍優(yōu)化 如果為以下情況,我們會發(fā)現(xiàn)最后的6和8所處的位置和最終排序完成的位置一樣,說明過程中他們的位置不會發(fā)生變化。 上一輪最后交換的位置,在下一輪時,此位置后面的數(shù)也不會再發(fā)生交換。 改進(jìn)點(diǎn)2: 記錄每一次最后發(fā)生交換的位置,下一輪只需要掃描到此位置的前一個即可。 代碼實(shí)現(xiàn)

// 記錄最后交換的位置 int position = 0; int len = n - 1; for (int i = 0; i 《 n - 1; ++i) { // flag標(biāo)記是否有交換 bool flag = true; for (int j = 0; j 《 len; ++j) { if (a[j] 》 a[j + 1]) { swap(a[j], a[j + 1]); flag = false; position = j; } } len = position; if (flag) { break; } }

05 總結(jié)

冒泡排序是比較簡單的一種排序算法,核心思想就是比較相鄰的兩個數(shù),但效率比較低所以可做一些優(yōu)化。時間復(fù)雜度為O(N^2),數(shù)據(jù)規(guī)模較小時可采用,但數(shù)據(jù)過大時就不建議采用冒泡了。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6762

    瀏覽量

    88626
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4697

    瀏覽量

    68093

原文標(biāo)題:圖解算法:冒泡排序

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    時間復(fù)雜度為 O(n^2) 的排序算法

    作者:京東保險 王奕龍 對于小規(guī)模數(shù)據(jù),我們可以選用時間復(fù)雜度為 O(n2) 的排序算法。因?yàn)闀r間復(fù)雜度并不代表實(shí)際代碼的執(zhí)行時間,它省去了低階、系數(shù)和常數(shù),僅代表的增長趨勢,所以在小規(guī)模數(shù)據(jù)情況下
    的頭像 發(fā)表于 10-19 16:31 ?704次閱讀
    時間復(fù)雜度為 O(n^2) 的<b class='flag-5'>排序</b><b class='flag-5'>算法</b>

    TPS54120排序和跟蹤

    電子發(fā)燒友網(wǎng)站提供《TPS54120排序和跟蹤.pdf》資料免費(fèi)下載
    發(fā)表于 10-10 10:54 ?0次下載
    TPS54120<b class='flag-5'>排序</b>和跟蹤

    手把手教你排序算法怎么寫

    今天以直接插入排序算法,給大家分享一下排序算法的實(shí)現(xiàn)思路,主要包含以下部分內(nèi)容:插入排序介紹插入排序
    的頭像 發(fā)表于 06-04 08:03 ?594次閱讀
    手把手教你<b class='flag-5'>排序</b><b class='flag-5'>算法</b>怎么寫

    音箱制作過程圖解

    電子發(fā)燒友網(wǎng)站提供《音箱制作過程圖解.doc》資料免費(fèi)下載
    發(fā)表于 04-28 09:27 ?10次下載

    用FPGA實(shí)現(xiàn)雙調(diào)排序的方法(2)

    典型的排序算法包括冒泡排序、選擇排序、插入排序、歸并排序
    的頭像 發(fā)表于 03-21 10:28 ?576次閱讀
    用FPGA實(shí)現(xiàn)雙調(diào)<b class='flag-5'>排序</b>的方法(2)

    FPGA實(shí)現(xiàn)雙調(diào)排序算法的探索與實(shí)踐

    雙調(diào)排序(BitonicSort)是數(shù)據(jù)獨(dú)立(Data-independent)的排序算法,即比較順序與數(shù)據(jù)無關(guān),特別適合并行執(zhí)行。在了解雙調(diào)排序
    發(fā)表于 03-14 09:50 ?459次閱讀
    FPGA實(shí)現(xiàn)雙調(diào)<b class='flag-5'>排序</b><b class='flag-5'>算法</b>的探索與實(shí)踐

    想聽聽48和大對數(shù)光纜的排序?

    48芯光纜和大對數(shù)光纜都是光纜中的一種,它們的區(qū)別在于芯數(shù)不同。48芯光纜指的是光纜中包含48根光纖,而大對數(shù)光纜則是指光纜中芯數(shù)超過了48芯。 在實(shí)際的光纜應(yīng)用中,不同芯數(shù)的光纜需要進(jìn)行不同的排序
    的頭像 發(fā)表于 03-12 10:44 ?492次閱讀

    C語言實(shí)現(xiàn)經(jīng)典排序算法概覽

    冒泡排序(英語:Bubble Sort)是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序(如從大到小、首字
    的頭像 發(fā)表于 02-25 12:27 ?394次閱讀
    C語言實(shí)現(xiàn)經(jīng)典<b class='flag-5'>排序</b><b class='flag-5'>算法</b>概覽

    十大排序算法總結(jié)

    排序算法是最經(jīng)典的算法知識。因?yàn)槠鋵?shí)現(xiàn)代碼短,應(yīng)該廣,在面試中經(jīng)常會問到排序算法及其相關(guān)的問題。一般在面試中最??嫉氖强焖?/div>
    的頭像 發(fā)表于 12-20 10:39 ?1048次閱讀

    保護(hù)器件過電應(yīng)力失效機(jī)理和失效現(xiàn)象淺析

    保護(hù)器件過電應(yīng)力失效機(jī)理和失效現(xiàn)象淺析
    的頭像 發(fā)表于 12-14 17:06 ?683次閱讀
    保護(hù)器件過電應(yīng)力失效機(jī)理和失效現(xiàn)象<b class='flag-5'>淺析</b>

    時間復(fù)雜度為O (nlogn)的排序算法簡述

    歸并排序遵循分治的思想:將原問題分解為幾個規(guī)模較小但類似于原問題的子問題,遞歸地求解這些子問題,然后合并這些子問題的解來建立原問題的解。
    的頭像 發(fā)表于 12-05 09:57 ?526次閱讀
    時間復(fù)雜度為O (nlogn)的<b class='flag-5'>排序</b><b class='flag-5'>算法</b>簡述

    python升序和降序排序代碼

    Python是一種簡潔而強(qiáng)大的編程語言,提供了許多實(shí)用的函數(shù)和方法來排序數(shù)據(jù)。在本文中,我們將詳細(xì)討論P(yáng)ython中的升序和降序排序。我們將深入探討不同的排序算法、它們的復(fù)雜度以及如何
    的頭像 發(fā)表于 11-21 15:20 ?2836次閱讀

    GPS接收機(jī)信號自適應(yīng)降秩濾波算法

    電子發(fā)燒友網(wǎng)站提供《GPS接收機(jī)信號自適應(yīng)降秩濾波算法.pdf》資料免費(fèi)下載
    發(fā)表于 11-17 16:42 ?0次下載
    GPS接收機(jī)信號<b class='flag-5'>之</b>自適應(yīng)降秩濾波<b class='flag-5'>算法</b>

    智能照明控制設(shè)計原則淺析

    電子發(fā)燒友網(wǎng)站提供《智能照明控制設(shè)計原則淺析.doc》資料免費(fèi)下載
    發(fā)表于 11-03 09:40 ?1次下載
    智能照明控制設(shè)計原則<b class='flag-5'>淺析</b>

    求助,大家都在單片機(jī)跑的算法有哪些?

    大家都在單片機(jī)中跑過什么算法? 如PID、冒泡排序、。。。。 還有那些算法?
    發(fā)表于 11-02 07:55