一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內不再提示

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

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

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

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

插入排序介紹

插入排序算法實現(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進行比較,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、實現(xiàn)排序邏輯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"); // 傳遞整型數(shù)據(jù)和長度進去,對數(shù)據(jù)進行排序insertSort(a,size);
for(i=0;i{ printf("%d ",a[i]);}

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

2.2函數(shù)聲明

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

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


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

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

2、尋找排序規(guī)律// 使用當前a[i]值和i下標前面的每一個數(shù)值進行比較// 如果 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] --結束本次比較 ,a[i]已經找到它所在的位置了
// 考慮邊界// i-j最小值為0,下標不能越界3、偽代碼描述先將a[i]的值存起來到變量val里面開始循環(huán)比較 j,1<=j<=i(滿足i-j最小值為0),每次增加1,保證下標連續(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;結束本次循環(huán),進入下一個數(shù)的插入排序。
4、代碼實現(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、驗證代碼

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

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


6、排查錯誤

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

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

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

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

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


運行代碼:

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

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

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

    關注

    30

    文章

    4880

    瀏覽量

    70025
  • 排序算法
    +關注

    關注

    0

    文章

    53

    瀏覽量

    10189
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

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

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

    手把手教你做星閃無人機—KaihongOS星閃無人機開發(fā)實戰(zhàn)》系列課程課件匯總

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

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

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

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

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

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

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

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

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

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

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

    Air780E模組LuatOS開發(fā)實戰(zhàn) —— 手把手教你搞定數(shù)據(jù)打包解包

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

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

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

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

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

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

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