插入排序——C語言

假設我們現在有一個數組,對它進行排序,插入排序的算法如同它的名字一樣,就是將元素一個一個插入到合適的位置,那么,該如何做呢??

如果我們要從小到大進行排序的話,步驟如下:

1.對于第一個數來說,一個數無法考慮順序問題,所以要從第二個數開始進行插入,進行排序。

2.排序的思想是:從頭開始遍歷,如果該數小于一個數,那么該數就插入到較大數的前面。

如圖:

我們現在讓 i 充當要插入的數,j 表示遍歷插入的數要比較的數,此時 i 指向的數大于 j 指向的數,所以位置不發生改變。

接著 i ++這時 i 指向的數值為1,小于 j 指向的數值,所以要將1插入到7的前面。說是插入,其實是先讓7 8 向后覆蓋,然后把1放到最開始7 的位置,循環覆蓋的范圍是j到i。

覆蓋過程如下:?

完成插入操作之后,i 接著加加,接著讓 j 從0 開始遍歷比較,當j等于1的時候,要插入的元素小于遍歷的元素,此時在完成插入操作,循環覆蓋的范圍是j到i。

接下來我們就可以開始寫代碼了,我們可以先寫出類似于這樣的代碼:

void InsertSort(int* array, int size) {for (int i = 1; i < size; i++) {————  i表示要插入的數  for (int j = 0; j < i; j++) {————  j表示要比較的數(插入的數之前的)取得要插入的數 numif (array[j] > 要插入的數) {將數插入到array[j]之前}}}
}

接著補全代碼:

void InsertSort(int* array, int size) {for (int i = 1; i < size; i++) {for (int j = 0; j < i; j++) {int num = array[i];if (array[j] > num) {for (int k = i; k > j; k--) {array[k] = array[k-1];}array[j] = num;}}}
}

????????或者我們可以換一種方式,剛才的代碼是從頭開始進行比較,我們也可以從后向前進行比較,如果遇到比插入的數大的值就接著向前進行尋找,同時進行覆蓋,如果遇到比插入的數小的值就跳出循環,最后實現調換位置。

代碼如下:

void InsertSort(int *array,int size) {for (int i = 0; i < size - 1; i++) {(因為要排序size-1次,所以循環size-1次)int end = i;int tmp = array[end + 1];while (end >= 0){	if (tmp < array[end]) {(如果要插入的值比array[end]值小,第一次循環是前一個值,第二次循環是前兩個值)array[end + 1] = array[end];(向后覆蓋數值,相當于后移比插入值大的數)end--;(向前繼續尋找)}else {break;}}array[end + 1] = tmp;(循環結束,把插入值插入到正確的位置,即比自己小的數的后面)}
}

這兩種方式都可以完成對數的插入排序。

這就是文章的全部內容了,希望對你有所幫助,如有錯誤歡迎指出。

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

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

相關文章

區間最值問題-RQM(ST表,線段樹)

1.ST表求解 ST表的實質其實是動態規劃&#xff0c;下面是區間最小的遞歸公式&#xff0c;最大只需將min改成max即可 f[i][j] min(f[i][j - 1], f[i (1 << j - 1)][j - 1]); 二維數組的f[i][j]表示從i開始連續2*j個數的最小/大值。 例如&#xff1a;我們給出一個數組…

uniapp啟動安卓模擬器mumu

mumu模擬器下載 ADB&#xff1a; android debug bridge &#xff0c; 安卓調試橋&#xff0c;是一個多功能的命令行工具&#xff0c;他使你能夠與連接的安卓設備進行交互 # adb連接安卓模擬器 adb connect 127.0.0.1:port # 查看adb設備 adb deviceshubuilderx 有內置的adb&a…

MSPM0G3507——滴答定時器和普通定時

滴答定時器定時&#xff1a;&#xff08;放在主函數即可&#xff09; volatile unsigned int delay_times 0;//搭配滴答定時器實現的精確ms延時 void delay_ms(unsigned int ms) {delay_times ms;while( delay_times ! 0 ); } //滴答定時器中斷 void SysTick_Handler(…

Kubernets Apiserver IP 段變更后的故障處理

集群Service IP 段變更后&#xff08;從 10.96.0.0/16 變為 10.17.0.0/16&#xff09;&#xff0c;導致 kubernetes.default.svc 的ClusterIP IP &#xff08;10.96.0.1&#xff09;和段范圍不一樣&#xff0c;對于這個情況&#xff0c;需要重建該 svc。 重建方法很簡單&#…

Python28-7.4 獨立成分分析ICA分離混合音頻

獨立成分分析&#xff08;Independent Component Analysis&#xff0c;ICA&#xff09;是一種統計與計算技術&#xff0c;主要用于信號分離&#xff0c;即從多種混合信號中提取出獨立的信號源。ICA在處理盲源分離&#xff08;Blind Source Separation&#xff0c;BSS&#xff0…

運維---關于服務治理Nacos的快問快答

問題&#xff1a;在服務治理中&#xff0c;服務提供者、服務消費者和注冊中心分別承擔著怎樣的角色&#xff1f; 回答&#xff1a; 服務提供者主要負責暴露服務接口&#xff0c;以供其他服務進行調用。 服務消費者的職責是調用其他服務所提供的接口。 注冊中心則承擔著記錄…

【機器學習】(基礎篇一) —— 什么是機器學習

什么是機器學習 本系列博客為你從機器學習的介紹開始&#xff0c;使用大量的代碼實戰和驗證&#xff0c;最終幫助你完全掌握什么是機器學習 人工智能、機器學習和深度學習的關系 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;&#xff1a;是一門研…

Java多線程不會?一文解決——

方法一 新建類如MyThread繼承Thread類重寫run()方法再通過new MyThread類來新建線程通過start方法啟動新線程 案例&#xff1a; class MyThread extends Thread {public MyThread(String name) {super(name);}Overridepublic void run() {for(int i0;i<10;i){System.out.…

react dangerouslySetInnerHTML將html字符串以變量方式插入頁面,點擊后出現編輯狀態

1.插入變量 出現以下編輯狀態 2.解決 給展示富文本的標簽添加css樣式 pointerEvents: none

黑馬點評,生成1000個token到redis代碼和1k個token的文件

原來的sql文件里面就可以插入1k個用戶&#xff0c; 這個代碼是從1000個User列表里面生成1k個token到redis里面 ResourceIUserService userService;Resource private StringRedisTemplate stringRedisTemplate;Testpublic void testGetAll() {List<User> users userServ…

activemq推數據給前端的方式

文章目錄 消費者程序接收消息并通過 WebSocket 將消息傳遞給前端 消費者程序接收消息并通過 WebSocket 將消息傳遞給前端 ActiveMQ 是一個開源的消息代理服務&#xff0c;可以用來實現各種消息傳遞模式&#xff0c;包括點對點和發布/訂閱模型。要將數據從 ActiveMQ 推送到前端…

那些年背過的面試題——MySQL篇

本文是技術人面試系列 MySQL 篇&#xff0c;面試中關于 MySQL 都需要了解哪些基礎&#xff1f;一文帶你詳細了解&#xff0c;歡迎收藏&#xff01; WhyMysql&#xff1f; NoSQL 數據庫四大家族 列存儲 Hbase K-V 存儲 Redis 圖像存儲 Neo4j 文檔存儲 MongoDB 云存儲 OSS …

AI大模型的智能心臟:向量數據庫的崛起

在人工智能的飛速發展中,一個關鍵技術正悄然成為AI大模型的智能心臟——向量數據庫。它不僅是數據存儲和管理的革命性工具,更是AI技術突破的核心。隨著AI大模型在各個領域的廣泛應用,向量數據庫的重要性日益凸顯。 01 技術突破:向量數據庫的內在力量 向量數據庫以其快速檢索…

第3章 配置 Vite

1 基本配置 Vite 的配置文件 vite.config.js 是基于 JavaScript 或 TypeScript 的文件&#xff0c;可以使用 ES 模塊語法進行導出。Vite 通過這個配置文件來調整各種構建和開發的選項。 1.1 創建配置文件 在項目根目錄創建 vite.config.js 文件&#xff1a; // vite.config…

RNN、LSTM與GRU循環神經網絡的深度探索與實戰

循環神經網絡RNN、LSTM、GRU 一、引言1.1 序列數據的迷宮探索者&#xff1a;循環神經網絡&#xff08;RNN&#xff09;概覽1.2 深度探索的階梯&#xff1a;LSTM與GRU的崛起1.3 撰寫本博客的目的與意義 二、循環神經網絡&#xff08;RNN&#xff09;基礎2.1 定義與原理2.1.1 RNN…

【Python】組合數據類型:序列,列表,元組,字典,集合

個人主頁&#xff1a;【&#x1f60a;個人主頁】 系列專欄&#xff1a;【??Python】 文章目錄 前言組合數據類型序列類型序列常見的操作符列表列表操作len()append()insert()remove()index()sort()reverse()count() 元組三種序列類型的區別 集合類型四種操作符集合setfrozens…

【CSS in Depth 2精譯】2.5 無單位的數值與行高

當前內容所在位置 第一章 層疊、優先級與繼承第二章 相對單位 2.1 相對單位的威力2.2 em 與 rem2.3 告別像素思維2.4 視口的相對單位2.5 無單位的數值與行高 ??2.6 自定義屬性2.7 本章小結 2.5 無單位的數值與行高 有些屬性允許使用無單位的數值&#xff08;unitless value…

【數據結構與算法】快速排序挖坑法

&#x1f493; 博客主頁&#xff1a;倔強的石頭的CSDN主頁 &#x1f4dd;Gitee主頁&#xff1a;倔強的石頭的gitee主頁 ? 文章專欄&#xff1a;《數據結構與算法》 期待您的關注 ?

前端面試題16(跨域問題)

跨域問題源于瀏覽器的同源策略&#xff08;Same-origin policy&#xff09;&#xff0c;這一策略限制了來自不同源的“寫”操作&#xff08;比如更新、刪除數據等&#xff09;&#xff0c;同時也限制了讀操作。當一個網頁嘗試請求與自身來源不同的資源時&#xff0c;瀏覽器會阻…