【十大排序算法】----C語言版插入排序(詳細圖解)


目錄

一:插入排序——原理

二:插入排序——分析

三:插入排序——實現

四:插入排序——效率


一:插入排序——原理

????????插入排序的原理和基本思想:把待排序的記錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中,直到所有的記錄插入完為止,得到一個新的有序序列 。

動圖如下:??

二:插入排序——分析

選擇排序的核心就是:多趟選擇插入

當插入第i(i>=1)個元素時,前面的array[0],array[1],…,array[i-1]已經排好序,此時用array[i]的排序碼與array[i-1],array[i-2],…的排序碼順序進行比較,找到插入位置即將array[i]插入,原來位置上的元素順序后移。

通俗來講就是:以升序(從小到大)下列動圖排序為例,假若N個數。

  • 第一次插入:因為第0個位置可以看作已經排好序了,將array[1](i ==1)看作是被插入的數據,即讓被插入的數據與 [ 0 , i ) 區間的元素數據相比,若遇到數據比 被插入的數據要大,遇到的數據后移一位,若遇到數據比 被插入的數據要小,就將被插入的數據插入到該數據的后面。這樣排好之后,前兩個數據就變得有序了。
  • 第二次插入:i == 2,此時前兩個數據是有序的,即是將 array[2]看作是被插入的數據,在往前進行觀察選擇插入。
  • ......
  • 最后一次插入:i==N -1,此時前N-1個數據是有序的,將array[N-1]看作是被插入的數據,在往前進行觀察選擇插入。這一趟選擇插入之后,這整個數組序列就變得有序了。

三:插入排序——實現

#include<stdio.h>
// 插入排序
void InsertSort(int* a, int n)
{for (int i = 1; i < n; i++)          // 決定所插入數據的位置 和 決定插入遍歷的次數     {int tem = a[i];                  // 被插入的數據int end = i - 1;                 // 決定 與被插入的數據相比較 的區間while (end >= 0)                 // 結束條件:全部數據比較完成,該循環目的是:找到比被插入數據要小的值的位置{if (a[end] > tem)            // 已排好的數組中end的位置上的數 比 所要插入的數 大就交換{a[end + 1] = a[end];     // 大數往后移一位end--;                   // end 往前走一步}else                         // 有數據比 被插入的數據要小,跳出循環{break;}}a[end + 1] = tem;                // 將要插入的數插入到 end 位置的后一位。}
}int main()
{int a[] = { 29,10,14,37,12,6,32 };int sz = sizeof(a) / sizeof(a[0]);     // 獲取數組的大小printf("插入排序:\n");for (int i = 0; i < n; i++)            // 打印排序前的序列{printf("%d ", a[i]);}printf("\n");InsertSort(a, sz);                     // 執行 插入排序 函數for (int i = 0; i < n; i++)            // 打印排序后的序列{printf("%d ", a[i]);}printf("\n");
}

四:插入排序——效率

時間復雜度:O(N^2)

空間復雜度:O(1)

插入排序是一種穩定的排序。

當元素集合越接近有序,插入排序算法的時間效率越高。


????????以上的內容若是對大家起到幫助的話,大家可以動動小手點贊,評論+收藏。大家的支持就是我進步路上的最大動力!?

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

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

相關文章

無需重啟 NGINX 開源版即可實現 SSL/TLS 證書輪換

原文作者&#xff1a;Maxim Ivanitskiy of F5 原文鏈接&#xff1a;無需重啟 NGINX 開源版即可實現 SSL/TLS 證書輪換 轉載來源&#xff1a;NGINX 開源社區 NGINX 唯一中文官方社區 &#xff0c;盡在 nginx.org.cn 在高性能 Web 服務器領域&#xff0c;NGINX 是一個廣受歡迎的…

Django使用

一、根目錄下安裝 pip install django 二、創建djiango項目 django-admin startproject 項目名稱 三、創建app python manage.py startapp app名稱 四、啟動 python manage.py runserver 五、編寫URL與視圖關系&#xff0c;相對路徑 1、manage.py&#xff08;見資源綁定…

mysql 8 創建用戶并賦予改用戶指定數據庫權限

一、使用客戶端工具登錄mysql 二、創建用戶 -- 低版本數據庫 create user 用戶名% identified by 密碼; -- 高版本數據庫 create user 用戶名% identified with mysql_native_password by 密碼; -- 示例1&#xff1a; create user test% identified with mysql_native_passwor…

apt和apt-get有什么區別

2024年5月15日&#xff0c;周三上午 apt 和 apt-get 都是 Debian 及其衍生版&#xff08;如 Ubuntu&#xff09;中用于軟件包管理的工具&#xff0c;但它們之間存在一些差異。 功能和目的&#xff1a; apt 是 apt-get 的改進版本&#xff0c;提供了更簡潔和更直觀的命令選項。…

多元化、高辨識顯示丨基于G32A1445的汽車尾燈解決方案

由剎車燈、倒車燈、轉向燈、霧燈等組成的汽車尾燈&#xff0c;既能在光線低暗時發出照明信息&#xff0c;也可向周圍環境傳遞車輛的行駛狀態與意圖信號&#xff0c;對于行車安全起著至關重要的作用。與傳統尾燈相比&#xff0c;貫穿式汽車尾燈更加醒目、美觀、安全&#xff0c;…

CSS2(一):CSS選擇器

文章目錄 1、CSS基礎1.1 CSS簡介1.2 CSS編寫位置1.2.1 行內樣式1.2.2 內部樣式1.2.3 外部樣式1.2.4 樣式優先級 1.2.5 CSS代碼風格 2、CSS選擇器2.1、基本選擇器2.1.1 通配選擇器2.1.2 元素選擇器2.1.3 類選擇器2.1.4 ID選擇器2.1.5 總結 2.2、CSS復合選擇器2.2.1 交集選擇器2.…

海外媒體宣發:新加坡.馬來西亞如何在海外媒體投放新聞通稿-大舍傳媒

導言 隨著全球化的進程加速&#xff0c;海外市場對于企業的發展越來越重要。而在海外媒體上宣傳企業的新聞通稿&#xff0c;成為了拓展海外市場和提升企業知名度的重要手段之一。本文將介紹大舍傳媒對于如何在海外媒體上投放新聞通稿的經驗和策略。 準備工作&#xff1a;了解…

Hive 特殊的數據類型 Array、Map、Struct

Array 數組類型&#xff0c;存儲數據類型一致的列表數據。 我們可以使用 array 方法來創建一個數組&#xff0c;如下所示&#xff1a; select array(1,2,3,4,5);如果其中的數據類型不一致&#xff0c;那么它會轉換成統一的數據類型&#xff08;前提是能夠進行轉換&#xff0…

力扣HOT100 - 322. 零錢兌換

解題思路&#xff1a; 動態規劃 class Solution {public int coinChange(int[] coins, int amount) {int[] dp new int[amount 1];Arrays.fill(dp, amount 1);dp[0] 0;for (int i 1; i < amount; i) {for (int j 0; j < coins.length; j) {if (coins[j] < i) …

word內容wxml轉化html標簽對照表

1. 標簽 w:document document 文檔w:bodybody文檔的主體w:sectPrsection——w:pp/div段落w:rspan行內元素w:ttext文本w:tbltable表格w:trtr表格行w:tctd單元格w:brbr換行w:hyperlinka超鏈接w:roundrectdiv/canvas塊w:pictimg圖片w:inlinespan行元素w:oMathmath公式w:subsub下標…

寵物管理系統帶萬字文檔

文章目錄 寵物管理系統一、項目演示二、項目介紹三、19000字論文參考四、部分功能截圖五、部分代碼展示六、底部獲取項目源碼和萬字論文參考&#xff08;9.9&#xffe5;帶走&#xff09; 寵物管理系統 一、項目演示 寵物管理系統 二、項目介紹 基于springbootvue的前后端分離…

如何讓Linux系統崩潰?

如何使 Linux 系統崩潰 警告 下面的代碼行是 Bash shell 的一個簡短而甜蜜的 fork 炸彈。分叉炸彈之所以有效&#xff0c;是因為它能夠產生無限數量的進程。最終&#xff0c;Linux無法處理所有這些&#xff0c;并且會崩潰。 fork 炸彈的一大優點是你不需要 root 權限即可執行它…

Vu2之使用provide與inject調用方法案例

Vu2之使用provide與inject調用方法案例 文章目錄 Vu2之使用provide與inject調用方法案例1. 祖先組件使用provide提供方法2. 后代組件使用inject注入并調用方法 在Vue 2中&#xff0c;provide和inject是用于在組件之間傳遞數據的一種高級技術。雖然它們通常用于傳遞數據&#xf…

【scikit-learn001】邏輯回歸(Logistic Regression)ML模型實戰及經驗總結(更新中)

1.一直以來想寫下基于scikit-learn訓練AI算法的系列文章&#xff0c;作為較火的機器學習框架&#xff0c;也是日常項目開發中常用的一款工具&#xff0c;最近剛好擠時間梳理、總結下這塊兒的知識體系。 2.熟悉、梳理、總結下scikit-learn框架邏輯回歸&#xff08;Logistic Regr…

新串口通道打通紀實

在計算機系統中&#xff0c;串口是“古老”的通信方式&#xff0c;和它同時代的“并口”通信方式已經消失了。但它仍然頑強的存活著&#xff0c;主要原因是在開發和調試底層軟件時還經常用到串口。 正因為有這樣的需求&#xff0c;幽蘭代碼本是支持串口的&#xff0c;而且有兩種…

vue中父子組件如何相互調用方法

Vue 中父子組件如何相互調用方法 在 Vue 中&#xff0c;父子組件可以通過以下方法相互調用方法&#xff1a; 父組件調用子組件方法 通過 props: 父組件向子組件傳遞一個 prop&#xff0c;該 prop 是一個函數&#xff0c;子組件可以調用它來觸發父組件的方法。通過 refs: 父組…

【現代C++】概念的使用

現代C&#xff08;特別是C20及以后的版本&#xff09;引入了概念&#xff08;Concepts&#xff09;&#xff0c;這是一種指定模板參數必須滿足的約束的方式。概念使得模板代碼更清晰&#xff0c;更容易理解和使用&#xff0c;并且能在編譯時提供更好的錯誤信息。以下是C概念的關…

UStaticMesh幾何數據相關(UE5.2)

UStaticMesh相關類圖 UStaticMesh的數據構成 UStaticMesh的FStaticMeshSourceModel UStaticMesh的Mesh幾何元數據來自于FStaticMeshSourceModel&#xff0c; 一級Lod就存在一個FStaticMeshSourceModel. FStaticMeshSourceModel幾何數據大致包含以下幾類: Vertex(點), VertexI…

【scikit-learn005】支持向量機(Support Vector Machines, SVM)ML模型實戰及經驗總結(更新中)

1.一直以來想寫下基于scikit-learn訓練AI算法的系列文章&#xff0c;作為較火的機器學習框架&#xff0c;也是日常項目開發中常用的一款工具&#xff0c;最近剛好擠時間梳理、總結下這塊兒的知識體系。 2.熟悉、梳理、總結下scikit-learn框架支持向量機&#xff08;Support Vec…