在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

信盈達 ? 2024-06-04 08:03 ? 次閱讀

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

今天以直接插入排序算法,給大家分享一下排序算法的實現思路,主要包含以下部分內容:

插入排序介紹

插入排序算法實現

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

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

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


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

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

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

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

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

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

4. 插入8的時候,要和有序表中的9進行比較,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、實現排序邏輯3、驗證調整代碼



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

2.1先寫框架-我的預期

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

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"); // 傳遞整型數據和長度進去,對數據進行排序insertSort(a,size);
for(i=0;i{ printf("%d ",a[i]);}

預期效果:// 3 0 9 8 2// 0 2 3 8 9

2.2函數聲明

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

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


2.3實現排序邏輯1、尋找突破口按照直接插入排序的規則,需要對下標為1以后的每一個數據進行插入排序,先獲取到下標為1之后的每一個數據。

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

2、尋找排序規律// 使用當前a[i]值和i下標前面的每一個數值進行比較// 如果 a[i-1] > a[i] a[i] = a[i-1] -- a[i]這個數據空間值可能被覆蓋掉,// 下面可能還要多次使用到該數據,// 因此可以將這個數據保存下來。// 繼續如果 a[i-2] > a[i] a[i-1] = a[i-2]//.....// 如果 a[i-j] < a[i] a[i-j+1] = a[i] --結束本次比較 ,a[i]已經找到它所在的位置了
// 考慮邊界// i-j最小值為0,下標不能越界3、偽代碼描述先將a[i]的值存起來到變量val里面開始循環比較 j,1<=j<=i(滿足i-j最小值為0),每次增加1,保證下標連續比較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;結束本次循環,進入下一個數的插入排序。
4、代碼實現

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、驗證代碼

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

出錯:沒有達到預期,即邏輯存在缺陷


6、排查錯誤

排查錯誤的時候,可以將比較的次數和每次比較后數組中的結果打印出來,進行排查。

因為數組打印要遍歷,為了不影響其他循環變量的值,可以在聲明一個變量。

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

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

從結果上看,第一次的0沒有插入成功,按照邏輯走一遍,發現i=1,j=1,0<3因此3向后移動一步,然后j=2,循環結束了。
也就是意味著,如果當前這個數是數組中的最小的數,應該放在下標為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];
// 如果當前a[i]是這個數組中最小的元素, // 交換位置后,只剩下0下標的位置了,需要將數據插入到0的位置上。 if(i-j == 0){ a[i-j] = val; } }
}
} }


運行代碼:

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

本篇內容旨在幫助初學者整理寫算法代碼思路。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4871

    瀏覽量

    69909
  • 排序算法
    +關注

    關注

    0

    文章

    53

    瀏覽量

    10177
收藏 人收藏

    評論

    相關推薦

    請求贈閱《零基礎開發AI Agent——手把手教你用扣子做智能體》

    博主好!致敬葉濤 管鍇 張心雨三位AI具身智能-智能體方面的專家、導師! 《零基礎開發AI Agent——手把手教你用扣子做智能體》一不懂編程的多數大眾也可以開發Agent,這意義深遠,功德無量
    發表于 04-10 12:16

    GPU顯卡維修避坑指南:手把手教你識別行業套路!

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

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

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

    《零基礎開發AI Agent——手把手教你用扣子做智能體》

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

    手把手教你做星閃無人機—KaihongOS星閃無人機開發實戰》系列課程課件匯總

    為助力開發者迅速掌握『KaihongOS輕量系統開發技術』與『星閃無線通信技術』,實現快速上手與深度體驗,“開鴻Developer社區”攜手“電子發燒友”再次聯合推出《手把手教你做星閃無人機
    發表于 03-18 10:33

    手把手教你做PC-KaihongOS筆記本電腦開發實戰》課件匯總

    ”攜手“電子發燒友”聯合推出了 《KaihongOS手把手系列直播課程》,該系列課程以實際產品為案例,詳細講解每個產品的開發全流程。 此次首發內容是《手把手教你做PC-KaihongOS筆記本電腦開發
    發表于 03-18 10:25

    【第四章 定時任務】手把手教你玩轉新版正點原子云

    【第四章 定時任務】手把手教你玩轉新版正點原子云 承接上篇,除了報警聯動這個功能,原子云還有一個特色功能也是各開發者喜歡用的,定時任務功能。 【正點原子】云平臺:原子云(點擊登錄原子云) 前言
    發表于 03-13 10:19

    【第一章 透傳策略】手把手教你玩轉新版正點原子云

    【第一章 透傳策略】手把手教你玩轉新版正點原子云 1. 本次實驗使用正點原子D40 Mini 4G Cat1 DTU數傳模塊 1.1 D40數傳模塊資料 具體使用和資料下載可到:D40 Mini
    發表于 03-05 16:52

    開發者集結!《手把手教你做星閃無人機》第二課開講啦!

    開發者集結!《手把手教你做星閃無人機》第二課開講啦!
    的頭像 發表于 02-17 19:40 ?208次閱讀
    開發者集結!《<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做星閃無人機》第二課開講啦!

    手把手教你做星閃無人機》即將開播,鎖定15日晚七點!

    ”再次聯合推出《手把手教你做星閃無人機—KaihongOS星閃無人機開發實戰》系列課程,該課程與《手把手教你做PC—KaihongOS筆記本電腦開發實戰》同步并行,
    的頭像 發表于 01-13 19:42 ?289次閱讀
    《<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做星閃無人機》即將開播,鎖定15日晚七點!

    手把手教你做PC》課程即將啟動!深開鴻引領探索KaihongOS筆記本電腦開發實戰

    ”攜手“電子發燒友”聯合推出了《KaihongOS手把手系列直播課程》,該系列課程以實際產品為案例,詳細講解每個產品的開發全流程。此次首發內容是《手把手教你做PC-
    的頭像 發表于 01-06 20:46 ?331次閱讀
    《<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做PC》課程即將啟動!深開鴻引領探索KaihongOS筆記本電腦開發實戰

    Air780E模組LuatOS開發實戰 —— 手把手教你搞定數據打包解包

    本文要說的是低功耗4G模組Air780E的LuatOS開發實戰,我將手把手教你搞定數據打包解包。
    的頭像 發表于 12-03 11:17 ?460次閱讀
    Air780E模組LuatOS開發實戰 —— <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>搞定數據打包解包

    手把手教你通過宏集物聯網工控屏&amp;網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶

    手把手教你通過宏集物聯網工控屏&網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶終端
    的頭像 發表于 08-15 13:29 ?821次閱讀
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>通過宏集物聯網工控屏&amp;網關進行協議轉換,將底層PLC/傳感器的數據轉換為TCP協議并傳輸到用戶

    手把手教你在orcad中設置CIS元器件數據庫,提高工作效率

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

    手把手帶你移植HAL庫函數

    開發者更高效地進行嵌入式開發。手把手帶你移植HAL庫函數HAL庫提供了一套抽象接口,使開發者無需直接操作底層硬件寄存器,就能實現對硬件的控制。這種抽象使得代碼能夠更
    的頭像 發表于 05-18 08:04 ?2720次閱讀
    <b class='flag-5'>手把手</b>帶你移植HAL庫函數
    主站蜘蛛池模板: 亚洲一区二区三区免费在线观看 | 激情婷婷| 天天操国产 | 亚洲第一黄色网 | 国产综合色在线视频区色吧图片 | 日本黄色短片 | 三级理论手机在线观看视频 | 天天草夜夜草 | 99久久久精品| 黄色的网站在线观看 | 噜噜嘿 | 明星三级国产免费播放 | 国产69精品久久久久9牛牛 | 亚洲区在线播放 | 在线免费午夜视频 | 欧美黑人粗硬大在线看 | 国产成人教育视频在线观看 | 中文天堂最新版资源新版天堂资源 | 米奇777四色精品人人爽 | 天天拍天天色 | www.av在线免费观看 | 亚洲欧洲色天使日韩精品 | 中文字幕一区二区三区在线不卡 | 爱爱欧美 | 日本系列 1页 亚洲系列 | 国产美女精品久久久久中文 | 99热在线获取最新地址 | 日韩免费视频一区二区 | 丁香亚洲综合五月天婷婷 | 欧美一级看片免费观看视频在线 | 特级一级全黄毛片免费 | 日本高清视频成人网www | 五月天丁香色 | 欧美精品aaa久久久影院 | 狠狠色噜噜狠狠狠狠2021天天 | 九九热免费观看 | 日本三级在线观看免费 | 性欧美xxxx乳高跟 | 午夜啪啪片 | 手机在线观看一级午夜片 | 黄色毛片免费进入 |