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

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

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

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

信盈達(dá) ? 2024-06-04 08:03 ? 次閱讀

efd2e72e-2205-11ef-bd4a-92fbcf53809c.jpg

今天以直接插入排序算法,給大家分享一下排序算法的實(shí)現(xiàn)思路,主要包含以下部分內(nèi)容:

插入排序介紹

插入排序算法實(shí)現(xiàn)

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

efe5b3e0-2205-11ef-bd4a-92fbcf53809c.png

在添加新的記錄時,使用順序查找的方式找到其要插入的位置,然后將新記錄插入。


以{3,0,9,8,2}無序表按升序排列為例,有序表是一個虛擬的順序表:
1. 插入排序剛開始,有序表中沒有數(shù)據(jù),因此直接插入3即可。{3}

eff3c688-2205-11ef-bd4a-92fbcf53809c.png

2. 插入0的時候要和有序表中記錄3進(jìn)行比較,0 <3,插入到3的左側(cè)。{0,3}

eff76ab8-2205-11ef-bd4a-92fbcf53809c.png

3. 插入9的時候,要和有序表中的記錄3進(jìn)行比較,9 > 3 插入到3的右側(cè){0,3,9}

effd1e72-2205-11ef-bd4a-92fbcf53809c.png

4. 插入8的時候,要和有序表中的9進(jìn)行比較,9 > 8 8>3因此添加到 9和3之間{0,3,8,9}

f008e4be-2205-11ef-bd4a-92fbcf53809c.png

5. 插入2的時候,要和有序表中的 9 8 3 0依次比較,確定2位于0和3之間{0,2,3,8,9}

f0112da4-2205-11ef-bd4a-92fbcf53809c.png

分析:1、先寫框架2、實(shí)現(xiàn)排序邏輯3、驗(yàn)證調(diào)整代碼



f015267a-2205-11ef-bd4a-92fbcf53809c.png

2.1先寫框架-我的預(yù)期

這是一段整理思路的過程。

int a[] = {3,0,9,8,2};int size = sizeof(a) / sizeof(int);int i;for(i=0;i{ printf("%d ",a[i]);}printf("\n"); // 傳遞整型數(shù)據(jù)和長度進(jìn)去,對數(shù)據(jù)進(jìn)行排序insertSort(a,size);
for(i=0;i{ printf("%d ",a[i]);}

預(yù)期效果:// 3 0 9 8 2// 0 2 3 8 9

2.2函數(shù)聲明

函數(shù)三要素:insertSort函數(shù)功能:實(shí)現(xiàn)對傳入數(shù)組的排序形參:數(shù)組,數(shù)組長度返回值:直接在原有數(shù)組中進(jìn)行排序即可,無需返回值。
先寫函數(shù)聲明

void insertSort(int a[],int size){ // ......}


2.3實(shí)現(xiàn)排序邏輯1、尋找突破口按照直接插入排序的規(guī)則,需要對下標(biāo)為1以后的每一個數(shù)據(jù)進(jìn)行插入排序,先獲取到下標(biāo)為1之后的每一個數(shù)據(jù)。

void insertSort(int a[],int size){ int i; int j; for(i=1;i { // a[i] 從下標(biāo)為1開始,每循環(huán)一次向后獲取到一個數(shù)據(jù)。
} }

2、尋找排序規(guī)律// 使用當(dāng)前a[i]值和i下標(biāo)前面的每一個數(shù)值進(jìn)行比較// 如果 a[i-1] > a[i] a[i] = a[i-1] -- a[i]這個數(shù)據(jù)空間值可能被覆蓋掉,// 下面可能還要多次使用到該數(shù)據(jù),// 因此可以將這個數(shù)據(jù)保存下來。// 繼續(xù)如果 a[i-2] > a[i] a[i-1] = a[i-2]//.....// 如果 a[i-j] < a[i] a[i-j+1] = a[i] --結(jié)束本次比較 ,a[i]已經(jīng)找到它所在的位置了
// 考慮邊界// i-j最小值為0,下標(biāo)不能越界3、偽代碼描述先將a[i]的值存起來到變量val里面開始循環(huán)比較 j,1<=j<=i(滿足i-j最小值為0),每次增加1,保證下標(biāo)連續(xù)比較a[i-j]和val的值
如果a[i-j] > val,a[i-j]需要向后移動,即a[i-j-1] = a[i-j] 如果a[i-j] <= val;val可以直接放在a[i-j+1]的位置,即a[i-j-1] = val;結(jié)束本次循環(huán),進(jìn)入下一個數(shù)的插入排序。
4、代碼實(shí)現(xiàn)

void insertSort(int a[],int size){ int i; int j; for(i=1;i { int val = a[i]; for(j=1;j<=i;j++) { if(a[i-j] <= val) { // 找到val坐在的位置了 a[i-j+1] = val; break; } else { a[i-j+1] = a[i-j]; }?
} } }

5、驗(yàn)證代碼

f01900a6-2205-11ef-bd4a-92fbcf53809c.png

出錯:沒有達(dá)到預(yù)期,即邏輯存在缺陷


6、排查錯誤

排查錯誤的時候,可以將比較的次數(shù)和每次比較后數(shù)組中的結(jié)果打印出來,進(jìn)行排查。

因?yàn)閿?shù)組打印要遍歷,為了不影響其他循環(huán)變量的值,可以在聲明一個變量。

f01cb69c-2205-11ef-bd4a-92fbcf53809c.png

f03090d6-2205-11ef-bd4a-92fbcf53809c.png

從結(jié)果上看,第一次的0沒有插入成功,按照邏輯走一遍,發(fā)現(xiàn)i=1,j=1,0<3因此3向后移動一步,然后j=2,循環(huán)結(jié)束了。
也就是意味著,如果當(dāng)前這個數(shù)是數(shù)組中的最小的數(shù),應(yīng)該放在下標(biāo)為0的這一步操作沒有做。
7、修正代碼

void insertSort(int a[],int size){ int i; int j; for(i=1;i { int val = a[i]; for(j=1;j<=i;j++) { if(a[i-j] <= val) { // 找到val坐在的位置了 a[i-j+1] = val; break; } else { a[i-j+1] = a[i-j];
// 如果當(dāng)前a[i]是這個數(shù)組中最小的元素, // 交換位置后,只剩下0下標(biāo)的位置了,需要將數(shù)據(jù)插入到0的位置上。 if(i-j == 0){ a[i-j] = val; } }
}
} }


運(yùn)行代碼:

f0343a74-2205-11ef-bd4a-92fbcf53809c.png

本篇內(nèi)容旨在幫助初學(xué)者整理寫算法代碼思路。

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

    關(guān)注

    30

    文章

    4722

    瀏覽量

    68229
  • 排序算法
    +關(guān)注

    關(guān)注

    0

    文章

    52

    瀏覽量

    10047
收藏 人收藏

    評論

    相關(guān)推薦

    STM32的ADC采樣及各式濾波算法實(shí)現(xiàn)

    本文為手把手教學(xué)ADC采樣及各式濾波算法的教程,本教程的MCU采用STM32F103ZET6。以HAL庫的ADC采樣函數(shù)為基礎(chǔ)進(jìn)行教學(xué),通過各式常見濾波的實(shí)驗(yàn)結(jié)果進(jìn)行分析對比,搭配VOFA+工具直觀的展示濾波效果。
    的頭像 發(fā)表于 10-28 10:51 ?638次閱讀
    STM32的ADC采樣及各式濾波<b class='flag-5'>算法</b>實(shí)現(xiàn)

    第14章-藍(lán)牙遙控小車 藍(lán)牙串口通訊講解藍(lán)牙APP遙控小車 藍(lán)牙串口通訊講解

    第14章-藍(lán)牙遙控小車 手把手做藍(lán)牙APP遙控小車 藍(lán)牙串口通訊講解
    的頭像 發(fā)表于 08-21 16:24 ?521次閱讀
    第14章-藍(lán)牙遙控小車 藍(lán)牙串口通訊講解藍(lán)牙APP遙控小車 藍(lán)牙串口通訊講解

    手把手教你通過宏集物聯(lián)網(wǎng)工控屏&amp;網(wǎng)關(guān)進(jìn)行協(xié)議轉(zhuǎn)換,將底層PLC/傳感器的數(shù)據(jù)轉(zhuǎn)換為TCP協(xié)議并傳輸?shù)接脩?/a>

    手把手教你通過宏集物聯(lián)網(wǎng)工控屏&網(wǎng)關(guān)進(jìn)行協(xié)議轉(zhuǎn)換,將底層PLC/傳感器的數(shù)據(jù)轉(zhuǎn)換為TCP協(xié)議并傳輸?shù)接脩艚K端
    的頭像 發(fā)表于 08-15 13:29 ?371次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>通過宏集物聯(lián)網(wǎng)工控屏&amp;網(wǎng)關(guān)進(jìn)行協(xié)議轉(zhuǎn)換,將底層PLC/傳感器的數(shù)據(jù)轉(zhuǎn)換為TCP協(xié)議并傳輸?shù)接脩? />    </a>
</div>                            <div   id=

    手把手教你在orcad中設(shè)置CIS元器件數(shù)據(jù)庫,提高工作效率

    元器件數(shù)據(jù)庫,就是實(shí)現(xiàn)上述查找元件、放置元件時所需要調(diào)用的數(shù)據(jù)庫。本文將手把手教你如何在orcad中配置CIS元器件數(shù)據(jù)庫。
    的頭像 發(fā)表于 06-15 17:27 ?5186次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>在orcad中設(shè)置CIS元器件數(shù)據(jù)庫,提高工作效率

    手把手教你使用物模型連接DDSU電表

    物模型其實(shí)就是云平臺對產(chǎn)品功能的數(shù)字化描述。以“燈”為例,最簡單的“燈”具有“開”和“關(guān)”屬性,只需要在平臺定義一個布爾量的數(shù)據(jù)點(diǎn)位,有些高級的“燈”還具有“亮度”、“色溫”、“顏色”等屬性,可以和簡單“燈”一樣定義多個屬性描述,也可以定義一個結(jié)構(gòu)體,下圖就是基于阿里云“物聯(lián)網(wǎng)平臺”定義的兩種“燈具”舉例。利用物模型規(guī)范數(shù)據(jù)傳輸?shù)母袷礁玫恼虾凸芾矶鄻踊?/div>
    的頭像 發(fā)表于 06-14 08:21 ?345次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>使用物模型連接DDSU電表

    手把手帶你移植HAL庫函數(shù)

    開發(fā)者更高效地進(jìn)行嵌入式開發(fā)。手把手帶你移植HAL庫函數(shù)HAL庫提供了一套抽象接口,使開發(fā)者無需直接操作底層硬件寄存器,就能實(shí)現(xiàn)對硬件的控制。這種抽象使得代碼能夠更
    的頭像 發(fā)表于 05-18 08:04 ?1583次閱讀
    <b class='flag-5'>手把手</b>帶你移植HAL庫函數(shù)

    手把手教你制作高速吹風(fēng)機(jī)

    前言: 高速吹風(fēng) 機(jī) 量價齊升 市場競爭格局初顯 吹風(fēng)機(jī)是居家生活必備物品,然而傳統(tǒng)型吹風(fēng)機(jī)所帶來的體驗(yàn)并不佳,高頻使用的女性群體對此更是深有感觸。究其原因主要有:轉(zhuǎn)速低,通常在每分鐘2萬轉(zhuǎn)左右,導(dǎo)致干發(fā)速度慢;高溫干發(fā),容易損傷頭發(fā);噪聲大且體積笨重等等。因此,能改善這些問題的高速吹風(fēng)機(jī)一經(jīng)推出便迅速風(fēng)靡市場、發(fā)展迅猛,品牌數(shù)量與產(chǎn)品型號均呈加速增長態(tài)勢。據(jù)統(tǒng)計(jì),2020年僅有6個品牌生產(chǎn)高速吹風(fēng)機(jī),共16款機(jī)型;
    發(fā)表于 03-28 09:22 ?671次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>制作高速吹風(fēng)機(jī)

    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 ?525次閱讀
    FPGA實(shí)現(xiàn)雙調(diào)<b class='flag-5'>排序</b><b class='flag-5'>算法</b>的探索與實(shí)踐

    無刷電機(jī)無感FOC控制培訓(xùn)系列課程

    | 本工作室推出電機(jī)控制無感foc電機(jī)控制系列培訓(xùn)課程本課程主要讓想進(jìn)階的算法工程師,和剛參加工作的工程師或者在校學(xué)生能夠進(jìn)一步提高自己的技能,1.從企業(yè)用人角度手把手教你做電機(jī)控制,提高你的個人
    發(fā)表于 03-10 13:52

    【先楫HPM5361EVK開發(fā)板試用體驗(yàn)】(原創(chuàng))5.手把手實(shí)戰(zhàn)AI機(jī)械臂

    HPMicro 【先楫HPM5361EVK開發(fā)板試用體驗(yàn)】2手把手實(shí)戰(zhàn)密鑰管理器 KEYM 【先楫HPM5361EVK開發(fā)板試用體驗(yàn)】3手把手實(shí)戰(zhàn)安全數(shù)據(jù)處理器 SDP 【先楫HPM5361EVK開發(fā)板
    發(fā)表于 02-06 10:28

    【飛騰派4G版免費(fèi)試用】4.手把手玩轉(zhuǎn)QT界面設(shè)計(jì)

    完成了使用Qt Designer進(jìn)行界面設(shè)計(jì)的全部流程!是不是覺得像魔法一樣神奇呢?趕緊試試吧! 接上三篇: 【飛騰派4G版免費(fèi)試用】1.實(shí)戰(zhàn)交叉編譯環(huán)境搭建和手把手uboot編譯 【飛騰派4G版免費(fèi)
    發(fā)表于 01-27 12:49

    工程送樣!手把手教你用好廣和通RedCap模組FG131&amp;amp;FG132系列

    工程送樣!手把手教你用好廣和通RedCap模組FG131&FG132系列
    的頭像 發(fā)表于 01-11 18:22 ?649次閱讀
    工程送樣!<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>用好廣和通RedCap模組FG131&amp;amp;FG132系列

    手把手教你制作DAPLink

    這篇文章主要描述利用RT-THREAD+CherryUSB制作DapLink調(diào)試器(R_DapLink)全流程。這里先感謝網(wǎng)友:sakumisu提供cherryUSB協(xié)議棧的技術(shù)支持。 什么是下載調(diào)試器簡單來說,下載調(diào)試器是將PC(例如通過USB協(xié)議)發(fā)送的命令轉(zhuǎn)換為MCU(負(fù)責(zé)MCU內(nèi)部外圍設(shè)備)理解的語言(例如SWD或JTAG協(xié)議)的設(shè)備,加載代碼并精確控制執(zhí)行。 什么是標(biāo)準(zhǔn)簡單來說,標(biāo)準(zhǔn)是一組規(guī)則和協(xié)議,特定行業(yè)中的每個參與者都同意遵循并執(zhí)行。符合某種內(nèi)核的單片機(jī)Q,都可以使用這種協(xié)議來下載程
    的頭像 發(fā)表于 12-26 08:35 ?4457次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>制作DAPLink

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

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

    最新ChatGPT詳細(xì)注冊圖文解說教程 ChatGPT賬號注冊詳細(xì)步驟分析

    2024年注冊ChatGPT詳細(xì)教程,手把手教你完成ChatGPT的注冊
    的頭像 發(fā)表于 12-04 17:18 ?8586次閱讀
    最新ChatGPT詳細(xì)注冊圖文解說教程  ChatGPT賬號注冊詳細(xì)步驟分析