91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

信盈達(dá) ? 2024-06-04 08:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

插入排序介紹

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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



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

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

這是一段整理思路的過(guò)程。

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ù)和長(zhǎng)度進(jìn)去,對(duì)數(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)對(duì)傳入數(shù)組的排序形參:數(shù)組,數(shù)組長(zhǎng)度返回值:直接在原有數(shù)組中進(jìn)行排序即可,無(wú)需返回值。
先寫(xiě)函數(shù)聲明

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


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

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

2、尋找排序規(guī)律// 使用當(dāng)前a[i]值和i下標(biāo)前面的每一個(gè)數(shù)值進(jìn)行比較// 如果 a[i-1] > a[i] a[i] = a[i-1] -- a[i]這個(gè)數(shù)據(jù)空間值可能被覆蓋掉,// 下面可能還要多次使用到該數(shù)據(jù),// 因此可以將這個(gè)數(shù)據(jù)保存下來(lái)。// 繼續(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]的值存起來(lái)到變量val里面開(kāi)始循環(huán)比較 j,1<=j<=i(滿足i-j最小值為0),每次增加1,保證下標(biāo)連續(xù)比較a[i-j]和val的值
如果a[i-j] > val,a[i-j]需要向后移動(dòng),即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)入下一個(gè)數(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

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


6、排查錯(cuò)誤

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

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

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

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

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

聲明:本文內(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)注

    30

    文章

    4968

    瀏覽量

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

    關(guān)注

    0

    文章

    53

    瀏覽量

    10426
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    從0到1,10+年資深LabVIEW專家,手把手教你攻克機(jī)器視覺(jué)+深度學(xué)習(xí)(5000分鐘實(shí)戰(zhàn)課)

    “告別檢測(cè)系統(tǒng)能力缺陷!10+年LabVIEW視覺(jué)資深專家手把手教你:5000+分鐘高清教程(含工具、算法原理、實(shí)戰(zhàn)操作、項(xiàng)目?jī)?yōu)化全流程講解)”——從傳統(tǒng)視覺(jué)算法→深度學(xué)習(xí)建?!I(yè)級(jí)
    的頭像 發(fā)表于 12-02 08:07 ?520次閱讀
    從0到1,10+年資深LabVIEW專家,<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>攻克機(jī)器視覺(jué)+深度學(xué)習(xí)(5000分鐘實(shí)戰(zhàn)課)

    迅為Hi3403開(kāi)發(fā)板極速啟航 | 手把手帶你玩轉(zhuǎn)核心例程,輕松上手AI視覺(jué)!

    迅為Hi3403開(kāi)發(fā)板極速啟航 | 手把手帶你玩轉(zhuǎn)核心例程,輕松上手AI視覺(jué)!
    的頭像 發(fā)表于 11-19 13:56 ?1715次閱讀
    迅為Hi3403開(kāi)發(fā)板極速啟航 | <b class='flag-5'>手把手</b>帶你玩轉(zhuǎn)核心例程,輕松上手AI視覺(jué)!

    【迅為RK3568開(kāi)發(fā)板NPU實(shí)戰(zhàn)】別再閑置你的NPU!手把手教你玩轉(zhuǎn)RKNN-Toolkit2 的使用

    【迅為RK3568開(kāi)發(fā)板NPU實(shí)戰(zhàn)】別再閑置你的NPU!手把手教你玩轉(zhuǎn)RKNN-Toolkit2 的使用
    的頭像 發(fā)表于 11-11 14:21 ?1116次閱讀
    【迅為RK3568開(kāi)發(fā)板NPU實(shí)戰(zhàn)】別再閑置你的NPU!<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>玩轉(zhuǎn)RKNN-Toolkit2 的使用

    【RK3568 NPU實(shí)戰(zhàn)】別再閑置你的NPU!手把手帶你用迅為資料跑通Android AI檢測(cè)Demo,附完整流程與效果

    【RK3568 NPU實(shí)戰(zhàn)】別再閑置你的NPU!手把手帶你用迅為資料跑通Android AI檢測(cè)Demo,附完整流程與效果
    的頭像 發(fā)表于 11-10 15:58 ?1057次閱讀
    【RK3568 NPU實(shí)戰(zhàn)】別再閑置你的NPU!<b class='flag-5'>手把手</b>帶你用迅為資料跑通Android AI檢測(cè)Demo,附完整流程與效果

    手把手教你AT指令A(yù)PN設(shè)置:專網(wǎng)連接零門(mén)檻!

    無(wú)論你的技術(shù)背景如何,本教程都將以手把手的方式,拆解AT指令A(yù)PN設(shè)置的全流程。專網(wǎng)連接不再是門(mén)檻,即刻開(kāi)啟自主配置之旅! APN是設(shè)備連接到運(yùn)營(yíng)商網(wǎng)絡(luò)的“身份證” ——當(dāng)設(shè)備插入SIM卡并注冊(cè)到
    的頭像 發(fā)表于 09-04 14:40 ?1128次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>AT指令A(yù)PN設(shè)置:專網(wǎng)連接零門(mén)檻!

    RT-Thread Nano硬核移植指南:手把手實(shí)現(xiàn)VGLite圖形驅(qū)動(dòng)適配 | 技術(shù)集結(jié)

    VGLite是NXP提供的輕量級(jí)2D圖形API,本文將手把手帶你實(shí)現(xiàn)VGLite圖形驅(qū)動(dòng)適配RT-Thread。文章分為上、下兩篇,將手把手教您移植。上篇對(duì)RT-ThreadNano內(nèi)核與Finsh組件進(jìn)行移植,下篇?jiǎng)t教您改寫(xiě)SDK中的VGLite代碼以將其適配到RT-T
    的頭像 發(fā)表于 07-17 14:40 ?3388次閱讀
    RT-Thread Nano硬核移植指南:<b class='flag-5'>手把手</b>實(shí)現(xiàn)VGLite圖形驅(qū)動(dòng)適配 | 技術(shù)集結(jié)

    【精選直播】手把手教你做PC第十二課:WIFI 驅(qū)動(dòng)框架適配

    手把手教你做PC》系列直播課再度開(kāi)播!《KaihongOS筆記本電腦開(kāi)發(fā)實(shí)戰(zhàn)第十二課:WIFI驅(qū)動(dòng)框架適配》將于07月02日19:00開(kāi)播↑掃碼入群,領(lǐng)課程講義資料包↑深開(kāi)鴻資深工程師親臨直播間
    的頭像 發(fā)表于 07-01 08:08 ?562次閱讀
    【精選直播】<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做PC第十二課:WIFI 驅(qū)動(dòng)框架適配

    手把手教你如何調(diào)優(yōu)Linux網(wǎng)絡(luò)參數(shù)

    在高并發(fā)網(wǎng)絡(luò)服務(wù)場(chǎng)景中,Linux內(nèi)核的默認(rèn)網(wǎng)絡(luò)參數(shù)往往無(wú)法滿足需求,導(dǎo)致性能瓶頸、連接超時(shí)甚至服務(wù)崩潰。本文基于真實(shí)案例分析,從參數(shù)解讀、問(wèn)題診斷到優(yōu)化實(shí)踐,手把手教你如何調(diào)優(yōu)Linux網(wǎng)絡(luò)參數(shù),支撐百萬(wàn)級(jí)并發(fā)連接。
    的頭像 發(fā)表于 05-29 09:21 ?964次閱讀

    正點(diǎn)原子Linux系列全新視頻教程來(lái)啦!手把手教你MP257開(kāi)發(fā)板,讓您輕松入門(mén)!

    正點(diǎn)原子Linux系列全新視頻教程來(lái)啦!手把手教你MP257開(kāi)發(fā)板,讓您輕松入門(mén)! 一、視頻觀看 正點(diǎn)原子手把手教你學(xué)STM32MP257-第1期:https://www.bilib
    發(fā)表于 05-16 10:42

    GPU顯卡維修避坑指南:手把手教你識(shí)別行業(yè)套路!

    的今天,高端顯卡維修已成“暴利暗流”。虛高報(bào)價(jià)、偷換配件、技術(shù)陷阱……用戶稍有不慎,輕則損失數(shù)萬(wàn),重則設(shè)備報(bào)廢。今天小助手將揭露行業(yè)亂象,手把手教你識(shí)別套路,并推薦
    的頭像 發(fā)表于 04-02 20:31 ?3785次閱讀
    GPU顯卡維修避坑指南:<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>識(shí)別行業(yè)套路!

    KiCad直播活動(dòng)(三):在 Windows上編譯KiCad 手把手教您編譯/構(gòu)建 KiCad 源碼

    Developer Ethan 同學(xué),手把手教您編譯/構(gòu)建 KiCad 源碼: 開(kāi)發(fā)工具安裝 環(huán)境變量配置 使用 VS2022 構(gòu)建 KiCad 參與直播的小伙伴還有機(jī)會(huì)獲得 KiCon Badge
    的頭像 發(fā)表于 03-24 11:14 ?1672次閱讀
    KiCad直播活動(dòng)(三):在 Windows上編譯KiCad <b class='flag-5'>手把手</b>教您編譯/構(gòu)建 KiCad 源碼

    《零基礎(chǔ)開(kāi)發(fā)AI Agent——手把手教你用扣子做智能體》

    《零基礎(chǔ)開(kāi)發(fā)AI Agent——手把手教你用扣子做智能體》是一本為普通人量身打造的AI開(kāi)發(fā)指南。它不僅深入淺出地講解了Agent的概念和發(fā)展,還通過(guò)詳細(xì)的工具介紹和實(shí)戰(zhàn)案例,幫助讀者快速掌握
    發(fā)表于 03-18 12:03

    手把手教你做星閃無(wú)人機(jī)—KaihongOS星閃無(wú)人機(jī)開(kāi)發(fā)實(shí)戰(zhàn)》系列課程課件匯總

    為助力開(kāi)發(fā)者迅速掌握『KaihongOS輕量系統(tǒng)開(kāi)發(fā)技術(shù)』與『星閃無(wú)線通信技術(shù)』,實(shí)現(xiàn)快速上手與深度體驗(yàn),“開(kāi)鴻Developer社區(qū)”攜手“電子發(fā)燒友”再次聯(lián)合推出《手把手教你做星閃無(wú)人機(jī)
    發(fā)表于 03-18 10:33

    手把手教你做PC-KaihongOS筆記本電腦開(kāi)發(fā)實(shí)戰(zhàn)》課件匯總

    ”攜手“電子發(fā)燒友”聯(lián)合推出了 《KaihongOS手把手系列直播課程》,該系列課程以實(shí)際產(chǎn)品為案例,詳細(xì)講解每個(gè)產(chǎn)品的開(kāi)發(fā)全流程。 此次首發(fā)內(nèi)容是《手把手教你做PC-KaihongOS筆記本電腦開(kāi)發(fā)
    發(fā)表于 03-18 10:25

    【第四章 定時(shí)任務(wù)】手把手教你玩轉(zhuǎn)新版正點(diǎn)原子云

    【第四章 定時(shí)任務(wù)】手把手教你玩轉(zhuǎn)新版正點(diǎn)原子云 承接上篇,除了報(bào)警聯(lián)動(dòng)這個(gè)功能,原子云還有一個(gè)特色功能也是各開(kāi)發(fā)者喜歡用的,定時(shí)任務(wù)功能。 【正點(diǎn)原子】云平臺(tái):原子云(點(diǎn)擊登錄原子云) 前言
    發(fā)表于 03-13 10:19