色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    4864

    瀏覽量

    69749
  • 排序算法
    +關注

    關注

    0

    文章

    53

    瀏覽量

    10149
收藏 人收藏

    評論

    相關推薦

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

    Developer Ethan 同學,手把手教您編譯/構建 KiCad 源碼: 開發工具安裝 環境變量配置 使用 VS2022 構建 KiCad 參與直播的小伙伴還有機會獲得 KiCon Badge
    的頭像 發表于 03-24 11:14 ?420次閱讀
    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

    【第三章 警報聯動】手把手教你玩轉新版正點原子云

    本帖最后由 jf_85110202 于 2025-3-13 14:43 編輯 【第三章 警報聯動】手把手教你玩轉新版正點原子云 新版原子云網址:原子云(點擊登錄原子云) 原子云特色功能:設置
    發表于 03-12 16:05

    【第二章 模型與設備連接】手把手教你玩轉新版正點原子云

    【第二章 模型與設備連接】手把手教你玩轉新版正點原子云玩過物聯網的朋友們都知道,我們在接觸各大主流云平臺時會知道物模型的概念。 本實驗就是針對原子云中模型與設備連接,舉個簡單例子說明,溫度傳感器通過
    發表于 03-12 09:27

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    手把手帶你移植HAL庫函數

    開發者更高效地進行嵌入式開發。手把手帶你移植HAL庫函數HAL庫提供了一套抽象接口,使開發者無需直接操作底層硬件寄存器,就能實現對硬件的控制。這種抽象使得代碼能夠更
    的頭像 發表于 05-18 08:04 ?2553次閱讀
    <b class='flag-5'>手把手</b>帶你移植HAL庫函數
    主站蜘蛛池模板: 孕妇高潮抽搐喷水30分钟 | 国产精品人妻无码免费A片导航 | 欧美一级久久久久久久大 | 亚洲精品久久久久AV无码林星阑 | 大学生高潮无套内谢视频 | 国产成人小视频在线观看 | 亚洲高清无在码在线电影 | 精品国产成人AV在线看 | 依恋影院在线观看 | 日韩精品 电影一区 亚洲高清 | 一久久 | 最近中文字幕无吗免费高清 | 亚洲国产成人综合 | 国产午夜精品AV一区二区麻豆 | ankha成人| 久久精品国产在热亚洲完整版 | 2020国产成人精品免费视频 | 日日噜噜夜夜躁躁狠狠 | 老师好爽你下面水好多视频 | 国语自产二区高清国语自产拍 | 欧美黄色一级 | 一本道色综合手机久久 | 大胸美女裸身色诱网站 | 天堂Av亚洲欧美日韩国产综合 | 国产叼嘿久久精品久久 | 亚洲视频中文字幕在线 | 波多久久亚洲精品AV无码 | 热久久视久久精品2015 | 专干老肥熟女视频网站300部 | 秋霞三级理伦免费观看 | 最近中文字幕MV免费高清在线 | 99九九精品视频 | 国产1000部成人免费视频 | 好吊日视频在线 | av av在线 | 亚洲欧美日韩在线观看一区二区三区 | 国产精品九九久久 | 国产高清视频在线观看97 | 欧美精品熟妇乱 | 色AV色婷婷66人妻久久久 | 无码欧美XXXXX在线观看裸 |