插入排序(形象類比)

最近在看riscv手冊的時候,里面有一段代碼是插入排序,但是單看代碼的時候有點迷,沒看懂咋操作的,后來又查資料復習了一下,最終才把代碼看明白,所以寫篇博客記錄一下。

插入排序像打撲克牌

這是我聽到過比較形象的一個比喻。在打撲克牌的時候,我們是一張一張去摸牌,然后將牌按照某種自己定義的順序進行排序。下面我來類比一下:

  • 從牌堆頂將要摸取的10張牌? <->? 待排序數組
  • 一張一張摸牌? <->? 一個數一個數進行排序
  • 牌要么在牌堆中,要么在手中;數要么在待排序子數組中,要么在已排序子數組中
  • 在牌堆中的牌加上在手中的牌是所有牌;在待排序子數組中的數加上在已排序子數組中的數是所有數(換句話說 我們將所有牌(數)分為了牌堆牌(待排序數組)和手中牌(已排序數組)兩部分)
  • 初始狀態:手中無牌(已排序數組為空),牌(數)全在牌堆(待排序數組)中
  • 依次從牌堆(待排序數組)中取牌(數),拿取到的牌(數)與手中的最大的牌進行比較,如果大于,則直接放在手的最右邊,否則就和次大的牌進行比較,直到找到這張牌的位置(不再進行具體的類比替換)
  • 直到牌堆中無牌,手中牌為排好序的牌

其實我咋說,都說不清,如果打牌的話,自己類比一下,會發現特別有意思。即使是a[j] = a[j-1]這一步,在摸牌時也有對應。下面我解釋一下這行碼。

比如說,我的手只能放10張牌,并且摸得牌都是從左到右以此放在我手上,所以我在比較大小的時候,如果這個牌比手里當前比較的牌小時,我會把手里當前比較的牌往后挪一下,給剛摸得牌放的空間。(我說的比較抽象 感覺還是需要想象 如果沒打過撲克 可能不太好理解我在說啥)??

下面放一段正兒八經的插入排序的說明吧。

?插入排序是一種簡單而有效的排序算法,它的基本思想是將一個元素插入到已經有序的序列中,從而得到一個新的、元素個數增加的有序序列。插入排序的過程可以類比于打撲克牌時,將摸到的牌按照大小順序插入到手中的牌中。插入排序的平均時間復雜度是 O(n^2),空間復雜度是 O(1)。下面我用一些例子來詳細解釋插入排序的原理和步驟。

假設我們有一個數組 [6, 7, 9, 3, 1, 5, 4, 8],我們要對它進行升序排序。我們可以用以下的方法進行插入排序:

  • 首先,我們將數組的第一個元素 6 看作是一個已經有序的序列,將剩余的元素看作是未排序的序列。
  • 然后,我們從未排序的序列中取出第一個元素 7,與已排序的序列中的元素從后往前依次比較,如果 7 大于或等于已排序的元素,則將 7 插入到該元素的后面,否則繼續比較。在這個例子中,7 大于 6,所以我們將 7 插入到 6 的后面,得到新的有序序列 [6, 7],未排序序列為 [9, 3, 1, 5, 4, 8]。
  • 接著,我們從未排序的序列中取出第一個元素 9,與已排序的序列中的元素從后往前依次比較,如果 9 大于或等于已排序的元素,則將 9 插入到該元素的后面,否則繼續比較。在這個例子中,9 大于 7 和 6,所以我們將 9 插入到 7 的后面,得到新的有序序列 [6, 7, 9],未排序序列為 [3, 1, 5, 4, 8]。
  • 依此類推,我們每次從未排序的序列中取出第一個元素,與已排序的序列中的元素從后往前依次比較,找到合適的位置插入,直到未排序的序列為空,排序完成。最終的有序序列為 [1, 3, 4, 5, 6, 7, 8, 9]。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167358.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167358.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167358.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

list的總結

目錄 1.什么是list 1.1list 的優勢和劣勢 優勢&#xff1a; 劣勢&#xff1a; 2.構造函數 2.1 default (1) 2.2 fill (2) 2.3 range (3) 2.4 copy (4) 3.list iterator的使用 3.1. begin() 3.2. end() 3.3迭代器遍歷 4. list容量函數 4.1. empty() 4.2. siz…

語音合成綜述Speech Synthesis

一、語音合成概述 語音信號的產生分為兩個階段&#xff0c;信息編碼和生理控制。首先在大腦中出現某種想要表達的想法&#xff0c;然后由大腦將其編碼為具體的語言文字序列&#xff0c;及語音中可能存在的強調、重讀等韻律信息。經過語言的組織&#xff0c;大腦通過控制發音器…

正整數分解

題目編號&#xff1a;Exp08-Basic01&#xff0c;GJBook3-12-05 題目名稱&#xff1a;正整數分解 題目描述&#xff1a;正整數n&#xff0c;按第一項遞減的順序依次輸出其和等于n的所有不增的正整數和式。 輸入&#xff1a;一個正整數n&#xff08;0<n≤15&#xff09;。 …

qRT-PCR相對定量計算詳解qPCR相對定量計算方式——2^-(??Ct) deta t

做完轉錄組分析之后&#xff0c;一般都要求做qRT-PCR來驗證二代測序得到的轉錄本表達是否可靠。熒光定量PCR是一種相對表達定量的方法&#xff0c;他的計算方法有很多&#xff0c;常用的相對定量數據分析方法有雙標曲線法&#xff0c;ΔCt法&#xff0c;2^-ΔΔCt法(Livak法)&a…

順序表基本操作全面解析

文章目錄 1.線性表2.順序表分類2.1 靜態順序表2.2 動態順序表 3. 順序表各接口實現1. 定義結構體(Seqlist)2. 結構體初始化(SLInit)3.檢查容量 (SLCheckCapacity)4.打印數據 (SLPrintf)5.插入操作5.1 從數據頭部插入(SLPushFront)5.2 從數據尾部插入(SLPushBack)5.3 從任意下標…

100天精通Python(可視化篇)——第106天:Pyecharts繪制多種炫酷桑基圖參數說明+代碼實戰

文章目錄 專欄導讀一、桑基圖介紹1. 桑基圖是什么?2. 桑基圖應用場景?二、桑基圖配置選項1. 導包2. add函數3. 分層設置三、桑基圖基礎1. 普通桑基圖2. 修改標簽位置3. 修改節點布局方向4、月度開支桑基圖書籍推薦專欄導讀 ????本文已收錄于《100天精通Python從入門到就…

線性表之順序表

文章目錄 主要內容一.順序表1.插入操作&#xff1a;代碼如下&#xff08;示例&#xff09;: 2.刪除操作&#xff1a;代碼如下&#xff08;示例&#xff09;: 3.按值查找&#xff1a;代碼如下&#xff08;示例&#xff09;: 總結 主要內容 順序表 預備知識 定義&#xff1a; 線…

GEE:基于 Landst 遙感數據計算的 kNDVI 下載 APP

作者&#xff1a;CSDN _養樂多_ 本文記錄了在Google Earth Engine&#xff08;GEE&#xff09;平臺中&#xff0c;使用 Landsat 遙感數據計算并且下載 kNDVI 的應用 APP 鏈接&#xff0c;并介紹該 APP 的使用方法和步驟。該APP可以為用戶展示 NDVI 和 kNDVI 的遙感影像&#…

抽象類, 接口, Object類 ---java

目錄 一. 抽象類 1.1 抽象類概念 1.2 抽象類語法 1.3 抽象類特性 1.4 抽象類的作用 二. 接口 2.1 接口的概念 2.2 語法規則 2.3 接口的使用 2.4 接口間的繼承 2.5 抽象類和接口的區別 三. Object類 3.1 toString() 方法 3.2 對象比較equals()方法 3.3 hash…

免費獲取GPT-4的五種工具

不可否認&#xff0c;由OpenAI帶來的GPT-4已是全球最受歡迎的、功能最強大的大語言模型&#xff08;LLM&#xff09;之一。大多數人都需要使用ChatGPT Plus的訂閱服務去訪問GPT-4。為此&#xff0c;他們通常需要每月支付20美元。那么問題來了&#xff0c;如果您不想每月有這筆支…

基于JavaWeb+SpringBoot+Vue醫院管理系統小程序的設計和實現

基于JavaWebSpringBootVue醫院管理系統小程序的設計和實現 源碼獲取入口Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄[Java 源碼獲取 源碼獲取入口 Lun文目錄 目錄 1系統概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系統設計思想 1 2相關技術 2 2.1微信小程序 2 2.2 …

井蓋位移傳感器廠家批發,守護井蓋安全

窨井蓋廣泛分布于城市街道&#xff0c;其管理效果直接反映了城市治理的現代化程度。根據住房和城鄉建設部發布的《關于進一步加強城市窨井蓋安全管理的通知》&#xff0c;全國各地需加強窨井蓋的安全管理。作為市政基礎設施的一個重要的組成部分&#xff0c;井蓋的管理工作不僅…

去水印網站哪個好?試試這個去水印軟件!

在工作中&#xff0c;我們都曾遇到過圖片水印的困擾。在眾多的在線水印去除工具中&#xff0c;雖然選擇看似豐富&#xff0c;但往往很難找到完全滿足我們需求的那一個。有些工具操作過程繁復&#xff0c;有些工具在處理復雜水印時力不從心&#xff0c;還有些工具在去水印的過程…

【Spring日志】

一.日志作用 1.定位和發現問題 這是日志的主要用途,通過查看日志,我們可以定位問題發生的位置,從而快速的發現問題,分析問題. 2.系統監控 監控幾乎是一個成熟系統的標配,我們可以通過日志記錄這個系統的運行狀態,比如記錄方法的響應時間,響應狀態,通過設置不同的規則,超過閾值就…

【MyBatis <if> <where>標簽介紹】

文章目錄 <if>標簽<where>標簽<foreach>標簽 <if>標簽 <if>標簽允許我們在SQL語句中添加條件判斷。 <if test"condition"><!-- 當條件滿足時執行的SQL語句 --> </if>其中&#xff0c;test屬性是一個表達式&#x…

葡萄酒按酒體如何分類,都有什么特點?

葡萄酒的酒體是指酒液在口腔中的飽滿度和分量感&#xff0c;品酒者常用“輕盈”“厚重”“適中”等詞匯來形容。所以&#xff0c;云倉酒莊的品牌雷盛紅酒分享在葡萄酒分類中還有一個類型&#xff0c;就是按照酒體進行分類。一般分為輕盈型、中等型、飽滿型。 輕盈型&#xff1…

海外https代理ip如何保障信息安全?該怎么選擇?

海外https代理ip是指通信協議為https的海外真實網絡地址ip&#xff0c;通常應用在各種跨境業務中。 一、什么是HTTPS協議 HTTP協議是一個應用層協議&#xff0c;通常運行在TCP協議之上。它是一個明文協議&#xff0c;客戶端發起請求&#xff0c;服務端給出響應的響應。由于網…

表單郵箱密碼登錄 原生+Jquery實現

文章目錄 效果代碼郵箱驗證正則表達式HTMLCSS JS 效果 正確密碼為&#xff1a;123456 點擊登錄按鈕校驗。 代碼 表單校驗 - CodeSandbox 郵箱驗證正則表達式 /(?:[a-z0-9!#$%&*/?^_{|}~-](?:\.[a-z0-9!#$%&*/?^_{|}~-])*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1…

Excel表中合并兩個Sheet的方法?

按AltF11&#xff0c;調出Visual Basic 界面。 在左側窗口中&#xff0c;右鍵選擇“插入”—“模塊”&#xff1a; 將如下代碼粘貼進去&#xff0c;點擊運行按鈕&#xff0c;完成數據表合并。 Sub MergeAllSheetsInThisWorkbook() On Error Resume Next Application.ScreenU…

JOSEF約瑟 熱過載保護繼電器 JR36-160,整定值100-160A

系列型號 JR36-20 1.0-1.6A熱繼電器 JR36-20 0.25-0.35A熱繼電器 JR36-20 0.32-0.5A熱繼電器 JR36-20 0.45-0.72A熱繼電器 JR36-20 0.68-1.1A熱繼電器 JR36-20 1.5-2.4A熱繼電器 JR36-20 2.2-3.5A熱繼電器 JR36-20 3.2-5A熱繼電器 JR36-20 4.5-7.2A熱繼電器 JR36-20 …