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

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

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

熟練掌握常用的排序算法

冬至配餃子 ? 來(lái)源:嵌入式案例Show ? 作者:嵌Sir ? 2022-08-20 09:40 ? 次閱讀

1、前言

排序是數(shù)據(jù)處理中經(jīng)常運(yùn)用的一種重要運(yùn)算,排序的功能是將一個(gè)數(shù)據(jù)元素(記錄)的任意序列,重新排列成一個(gè)按照一個(gè)規(guī)則有序的序列。常用的排序算法我們要熟練掌握。

2、冒泡排序

冒泡排序(英語(yǔ):Bubble Sort)是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序(如從大到小、首字母從A到Z)錯(cuò)誤就把他們交換過(guò)來(lái)。

示例:

poYBAGMAOruAL01VAAEBj1wgHog062.png

3、選擇排序

選擇排序(Selection sort)是一種簡(jiǎn)單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最?。ù螅┰?,存放到排序序列的起始位置,然后,再?gòu)氖S辔磁判蛟刂欣^續(xù)尋找最?。ù螅┰?,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

示例:

pYYBAGMAOtKAddFZAADE9s8DT38780.png

4、插入排序

插入排序(英語(yǔ):Insertion Sort)是一種簡(jiǎn)單直觀的排序算法。它的工作原理是通過(guò)構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。插入排序在實(shí)現(xiàn)上,通常采用in-place排序,因而在從后向前掃描過(guò)程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。

示例:

poYBAGMAOuSAMzv8AAB-sAsyGzI328.png

5、希爾排序

希爾排序,也稱遞減增量排序算法,是插入排序的一種更高效的改進(jìn)版本。希爾排序是非穩(wěn)定排序算法。

希爾排序是基于插入排序的以下兩點(diǎn)性質(zhì)而提出改進(jìn)方法的:

插入排序在對(duì)幾乎已經(jīng)排好序的數(shù)據(jù)操作時(shí),效率高,即可以達(dá)到線性排序的效率

但插入排序一般來(lái)說(shuō)是低效的,因?yàn)椴迦肱判蛎看沃荒軐?shù)據(jù)移動(dòng)一位

希爾排序先將待排記錄序列分割成為若干子序列分別進(jìn)行插入排序,待整個(gè)序列中的記錄"基本有序"時(shí),再對(duì)全體記錄進(jìn)行一次直接插入排序。

示例:

pYYBAGMAOvaAY8bDAACfNRPrx-0060.png

6、歸并排序

歸并排序應(yīng)用的是分治的思想,將大隊(duì)列劃分成小隊(duì)列,然后小隊(duì)列內(nèi)排序,再將排好序的小隊(duì)列組合成大隊(duì)列,步驟:

1、將劃分成兩個(gè)隊(duì)列直到不可再分為止

2、小隊(duì)列內(nèi)排序

3、左隊(duì)列與右隊(duì)列合并

4、返回合并的隊(duì)列

示例:

poYBAGMAOxuAA4jjAAEh-jcUQj8079.png

7、快速排序

快速排序的基本思想是:通過(guò)一趟排序?qū)⒋庞涗浄指畛瑟?dú)立的兩部分,其中一部分記錄的關(guān)鍵字均比另一部分記錄的關(guān)鍵字小,則可分別對(duì)這兩部分記錄繼續(xù)進(jìn)行排序,已達(dá)到整個(gè)序列有序。一趟快速排序的具體過(guò)程可描述為:從待排序列中任意選取一個(gè)記錄(通常選取第一個(gè)記錄)作為基準(zhǔn)值,然后將記錄中關(guān)鍵字比它小的記錄都安置在它的位置之前,將記錄中關(guān)鍵字比它大的記錄都安置在它的位置之后。這樣,以該基準(zhǔn)值為分界線,將待排序列分成的兩個(gè)子序列。

一趟快速排序的具體做法為:設(shè)置兩個(gè)指針low和high分別指向待排序列的開(kāi)始和結(jié)尾,記錄下基準(zhǔn)值baseval(待排序列的第一個(gè)記錄),然后先從high所指的位置向前搜索直到找到一個(gè)小于baseval的記錄并互相交換,接著從low所指向的位置向后搜索直到找到一個(gè)大于baseval的記錄并互相交換,重復(fù)這兩個(gè)步驟直到low=high為止

示例:

poYBAGMAO0CAHg1AAAEAiKJZq68115.pngpYYBAGMAO0aAErN_AABxdMH6wck722.png



審核編輯:劉清

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

    關(guān)注

    23

    文章

    4612

    瀏覽量

    92900
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    480

    瀏覽量

    70564
  • 數(shù)據(jù)處理
    +關(guān)注

    關(guān)注

    0

    文章

    599

    瀏覽量

    28568
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    高薪 mcu 觸控算法專家(觸控按鍵,不要觸控屏)

    觸摸原理,具有觸摸算法/硬件的成功設(shè)計(jì)開(kāi)發(fā)和調(diào)測(cè)經(jīng)驗(yàn)(至少熟練掌握電容觸摸原理); 5、精通觸摸相關(guān)安規(guī)認(rèn)證的測(cè)試規(guī)范; 6、具有觸摸算法大量產(chǎn)應(yīng)用經(jīng)驗(yàn),面向家電應(yīng)用觸控算法經(jīng)驗(yàn)優(yōu)先;
    發(fā)表于 12-27 14:12

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+內(nèi)容簡(jiǎn)介

    、AI芯片、多媒體處理芯片等)都是由四則運(yùn)算器、濾波器、特殊信號(hào)發(fā)生器等基本算法電路構(gòu)成的,熟練掌握這些基本算法電路是實(shí)現(xiàn)復(fù)雜算法電路的基礎(chǔ)。忽視基本
    發(fā)表于 11-21 17:14

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+介紹基礎(chǔ)硬件算法模塊

    數(shù)問(wèn)題。因此,深入理解芯片所基于的算法是國(guó)產(chǎn)自主研發(fā)的關(guān)鍵。任何算法都是由加減四則運(yùn)算、濾波器、特殊信號(hào)發(fā)生器等基本數(shù)學(xué)方法構(gòu)成的,熟練掌握這些方法是實(shí)現(xiàn) 算法的基礎(chǔ)。如果說(shuō)復(fù)雜
    發(fā)表于 11-21 17:05

    物聯(lián)網(wǎng)學(xué)習(xí)路線來(lái)啦!

    環(huán)境 STM32主流開(kāi)發(fā)方式 3.1.2單片機(jī)常見(jiàn)接口 熟練掌握GPIO、UART、SPI、I2C、ADC等接口,以及中斷、定時(shí)器、DMA等單片機(jī)基本模塊的使用,適度了解看門狗、低功耗控制。 3.1.3
    發(fā)表于 11-11 16:03

    基于FPGA實(shí)現(xiàn)數(shù)碼管顯示

    本文介紹數(shù)碼管顯示譯碼基本工作原理及Verilog HDL驅(qū)動(dòng)代碼編寫(xiě),進(jìn)一步熟練掌握FPGA入門基礎(chǔ)知識(shí)。
    的頭像 發(fā)表于 10-24 14:44 ?943次閱讀
    基于FPGA實(shí)現(xiàn)數(shù)碼管顯示

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

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

    名單公布!【書(shū)籍評(píng)測(cè)活動(dòng)NO.46】從算法到電路 | 數(shù)字芯片算法的電路實(shí)現(xiàn)

    的,熟練掌握這些基本算法電路是實(shí)現(xiàn)復(fù)雜算法電路的基礎(chǔ)。忽視基本算法及其電路設(shè)計(jì)而談?wù)搹?fù)雜算法電路,無(wú)異于癡人說(shuō)夢(mèng)。 本書(shū)力求從
    發(fā)表于 10-09 13:43

    常用的ADC濾波算法有哪些

    ADC(模數(shù)轉(zhuǎn)換器)濾波算法在信號(hào)處理中起著至關(guān)重要的作用,它們能夠幫助我們提取出有用的信號(hào),同時(shí)濾除噪聲和干擾。以下是常用的ADC濾波算法詳解,這些算法各具特色,適用于不同的應(yīng)用場(chǎng)景
    的頭像 發(fā)表于 10-08 14:35 ?393次閱讀

    常用的電機(jī)控制算法有哪些

    在電機(jī)控制領(lǐng)域,選擇合適的控制算法對(duì)于實(shí)現(xiàn)高效、精確且穩(wěn)定的電機(jī)運(yùn)行至關(guān)重要。以下將詳細(xì)介紹幾種常用的電機(jī)控制算法,并通過(guò)具體的分析和實(shí)例,探討它們的特點(diǎn)、應(yīng)用以及優(yōu)勢(shì)。
    的頭像 發(fā)表于 06-05 16:31 ?2353次閱讀

    手把手教你排序算法怎么寫(xiě)

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

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

    典型的排序算法包括冒泡排序、選擇排序、插入排序、歸并排序、快速
    的頭像 發(fā)表于 03-21 10:28 ?641次閱讀
    用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ù)無(wú)關(guān),特別適合并行執(zhí)行。在了解雙調(diào)排序
    發(fā)表于 03-14 09:50 ?653次閱讀
    FPGA實(shí)現(xiàn)雙調(diào)<b class='flag-5'>排序</b><b class='flag-5'>算法</b>的探索與實(shí)踐

    嵌入式工程師需要掌握哪些技術(shù)?

    一些必要的技術(shù)能力是至關(guān)重要的。在本篇中,我們將討論入行嵌入式所必須的技術(shù)能力。 1.C/C++編程能力:C/C++是嵌入式系統(tǒng)開(kāi)發(fā)中最常用的編程語(yǔ)言。熟練掌握C/C++語(yǔ)言將使你能夠理解和編寫(xiě)底層
    發(fā)表于 03-04 16:38

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

    冒泡排序(英語(yǔ):Bubble Sort)是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序(如從大到小、首字母從A到Z)錯(cuò)誤就把他們交換過(guò)來(lái)。
    的頭像 發(fā)表于 02-25 12:27 ?451次閱讀
    C語(yǔ)言實(shí)現(xiàn)經(jīng)典<b class='flag-5'>排序</b><b class='flag-5'>算法</b>概覽

    聊一聊嵌入式C語(yǔ)言

    作為一名嵌入式軟件開(kāi)發(fā)者,熟練掌握嵌入式C語(yǔ)言對(duì)我的日常工作至關(guān)重要。
    的頭像 發(fā)表于 01-22 09:28 ?548次閱讀