女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

    文章

    4886

    瀏覽量

    70209
  • 排序算法
    +關注

    關注

    0

    文章

    53

    瀏覽量

    10202
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    明晚七點!手把手教你做PC第九課:全功能TypeC驅動框架適配

    手把手教你做PC》系列直播課再度開播!《KaihongOS筆記本電腦開發實戰第九課:全功能TypeC驅動框架適配》將于5月21日19:00開播↑掃碼入群,領課程講義資料包↑深開鴻資深工程師親臨直播
    的頭像 發表于 05-20 08:07 ?42次閱讀
    明晚七點!<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做PC第九課:全功能TypeC驅動框架適配

    正點原子Linux系列全新視頻教程來啦!手把手教你MP257開發板,讓您輕松入門!

    正點原子Linux系列全新視頻教程來啦!手把手教你MP257開發板,讓您輕松入門! 一、視頻觀看 正點原子手把手教你學STM32MP257-第1期:https://www.bilib
    發表于 05-16 10:42

    周三晚19:00,手把手教你做PC第七課:Audio 音頻驅動框架適配

    手把手教你做PC》系列直播課再度開播!《KaihongOS筆記本電腦開發實戰⑦:Audio音頻驅動框架適配》將于4月23日19:00開播↑掃碼入群,領課程講義資料包↑深開鴻資深工程師親臨直播間依托
    的頭像 發表于 04-22 08:05 ?135次閱讀
    周三晚19:00,<b class='flag-5'>手把手</b><b class='flag-5'>教你</b>做PC第七課:Audio 音頻驅動框架適配

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

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

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

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

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

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

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

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

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

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

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

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

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

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