【算法】直接插入排序

目錄

          • 1. 說明
          • 2. 舉個例子
          • 3. java代碼示例
          • 4. java示例截圖

1. 說明
  • 1.直接插入排序的方式和打牌一樣,剛開始數組為空
  • 2.拿到一個數字后從左到右將它與數組中的每一個數字進行比較,然后插入合適的位置
  • 3.到最后,數組按照既定的順序排序好
2. 舉個例子
  • 示例: [5, 3, 4, 1, 2]
  • 1. 獲取數組的長度5,從第二個數開始循環操作
  • 2. 取下一個比較的值3,索引i為1,上一個索引j為0
  • 3.判斷5是否大于3,則索引為1的數字改為5,得到 [5, 5, 4, 1, 2],j=j-1=-1,j<0跳出循環
  • 4.將索引0的位置的數字改為3,得到[3, 5, 4, 1, 2]
  • 5. 取下一個比較的值4,索引i為2,上一個索引j為1 (索引0到索引j都是有序的)
  • 6. 比較索引1位置的數字,5大于4,將索引2位置的數字改為5(往后挪一位),得到[3, 5, 5, 1, 2],j=j-1=0
  • 7. 比較索引0位置的數字,3小于4,跳出循環
  • 8. 將索引1位置的數字改為4,得到[3, 4, 5, 1, 2]
  • 9. 取下一個比較的值1,索引i為3,上一個索引j為2 (索引0到索引j都是有序的)
  • 10. 比較索引2位置的數字,5大于1,將索引3位置的數字改為5(往后挪一位),得到[3, 4, 5, 5, 2],j=j-1=1
  • 11. 比較索引1位置的數字,4大于1,將索引2位置的數字改為4(往后挪一位),得到[3, 4, 4, 5, 2],j=j-1=0
  • 12. 比較索引0位置的數字,3大于1,將索引1位置的數字改為3(往后挪一位),得到[3, 3, 4, 5, 2],j=j-1=-1,j<0跳出循環
  • 13. 將索引0位置的數字改為1,得到[1, 3, 4, 5, 2]
  • 14. 取下一個比較的值2,索引i為4,上一個索引j為3(索引0到索引j都是有序的)
  • 15. 比較索引3位置的數字,5大于2,將索引4位置的數字改為5(往后挪一位),得到[1, 3, 4, 5, 5],j=j-1=2
  • 16. 比較索引2位置的數字,4大于2,將索引3位置的數字改為4(往后挪一位),得到[1, 3, 4, 4, 5],j=j-1=1
  • 17. 比較索引1位置的數字,3大于2,將索引2位置的數字改為3(往后挪一位),得到[1, 3, 3, 4, 5],j=j-1=0
  • 18. 比較索引0位置的數字,1小于2,跳出循環
  • 19. 將索引1位置的數字改為2,得到[1, 2, 3, 4, 5]
3. java代碼示例
package com.learning.algorithm.sort;/*** 直接插入排序* 示例: 5, 3, 4, 1, 2* 1.獲取數組的長度5,從第二個數開始循環操作* ===開始循環===* 2.取下一個比較的值3,索引i為1,上一個索引j為0* 3.判斷5是否大于3,則索引為1的數字改為5,得到 [5, 5, 4, 1, 2],j=j-1=-1,j<0跳出循環* 4.將索引0的位置的數字改為3,得到[3, 5, 4, 1, 2]* ===繼續循環===* 5.取下一個比較的值4,索引i為2,上一個索引j為1 (索引0到索引j都是有序的)* 6.比較索引1位置的數字,5大于4,將索引2位置的數字改為5(往后挪一位),得到[3, 5, 5, 1, 2],j=j-1=0* 7.比較索引0位置的數字,3小于4,跳出循環* 8.將索引1位置的數字改為4,得到[3, 4, 5, 1, 2]* ===繼續循環===* 9.取下一個比較的值1,索引i為3,上一個索引j為2 (索引0到索引j都是有序的)* 10.比較索引2位置的數字,5大于1,將索引3位置的數字改為5(往后挪一位),得到[3, 4, 5, 5, 2],j=j-1=1* 11.比較索引1位置的數字,4大于1,將索引2位置的數字改為4(往后挪一位),得到[3, 4, 4, 5, 2],j=j-1=0* 12.比較索引0位置的數字,3大于1,將索引1位置的數字改為3(往后挪一位),得到[3, 3, 4, 5, 2],j=j-1=-1,j<0跳出循環* 13.將索引0位置的數字改為1,得到[1, 3, 4, 5, 2]* ===繼續循環===* 14.取下一個比較的值2,索引i為4,上一個索引j為3(索引0到索引j都是有序的)* 15.比較索引3位置的數字,5大于2,將索引4位置的數字改為5(往后挪一位),得到[1, 3, 4, 5, 5],j=j-1=2* 16.比較索引2位置的數字,4大于2,將索引3位置的數字改為4(往后挪一位),得到[1, 3, 4, 4, 5],j=j-1=1* 17.比較索引1位置的數字,3大于2,將索引2位置的數字改為3(往后挪一位),得到[1, 3, 3, 4, 5],j=j-1=0* 18.比較索引0位置的數字,1小于2,跳出循環* 19.將索引1位置的數字改為2,得到[1, 2, 3, 4, 5]*/
public class DirectInsertSort {public static void sort(int array[]) {// 獲取數組的長度int length = array.length;// 從第二位開始比較for (int i = 1; i < length; ++i) {// 獲取下一個比較的值int key = array[i];// 上一個索引int j = i - 1;// 比較到索引大于等于0的 且 遍歷前面的值 與 key比較大小,如果比key大,大的值往后挪一位while (j >= 0 && array[j] > key) {// 比key大的值往后挪一位array[j + 1] = array[j];// 繼續比較前面的值和key的大小j = j - 1;}// 當array[j]比key小,則array[j+1]的數字改為keyarray[j + 1] = key;}}/* A utility function to print array of size n*/public static void print(int[] array) {for (int i : array) {System.out.print(i + " ");}}public static void main(String args[]) {int array[] = {5, 3, 4, 1, 2};DirectInsertSort.sort(array);DirectInsertSort.print(array);}
}
4. java示例截圖

在這里插入圖片描述

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

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

相關文章

OpenCV基礎篇

OpenCV基礎篇 一、圖像、視頻讀取二、cv::Mat()數據類型三、繪圖功能四、鼠標響應事件五、圖像像素讀寫六、圖像像素運算七、顏色空間轉換八、圖像幾何變換九、圖像濾波十、圖像二值化十一、圖像梯度十二、Canny邊緣檢測十三、圖像形態學十四、圖像直方圖十五、霍夫變換十六、分…

線程池的拒絕策略

文章目錄 線程池的拒絕策略AbortPolicy拒絕策略&#xff1a;CallerRunsPolicy拒絕策略&#xff1a;DiscardOldestPolicy拒絕策略&#xff1a;DiscardPolicy拒絕策略&#xff1a; 線程池的拒絕策略 若在線程池當中的核心線程數已被用完且阻塞隊列已排滿&#xff0c;則此時線程池…

springboot_ssm_java學位論文盲審系統

本系統主要實現用戶登錄驗證&#xff0c;用戶使用郵箱&#xff0c;密碼和選擇身份進行登錄&#xff0c;用戶查看個人中心&#xff0c;提交論文&#xff0c;發表留言和問題反饋。用戶在線注冊。學生模塊功能實現&#xff1a;學生注冊&#xff0c;查看信息&#xff0c;修改資料&a…

智能優化算法應用:基于魚鷹算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于魚鷹算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于魚鷹算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.魚鷹算法4.實驗參數設定5.算法結果6.參考文獻7.MATLAB…

藍橋杯航班時間

藍橋杯其他真題點這里&#x1f448; //飛行時間 - 時差 已過去的時間1 //飛行時間 時差 已過去的時間2 //兩個式子相加會發現 飛行時間 兩段時間差的和 >> 1import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public cl…

Android藍牙協議棧fluoride(四) - 設備管理(bt interface)

設備管理的接口實現了藍牙的開/關、屬性設置、發現設備、獲取profile的接口等等。 接口聲明 接口聲明如下&#xff1a; // include/hardware/bluetooth.h typedef struct {// 打開接口并注冊回調函數int (*init)(bt_callbacks_t* callbacks, bool is_atv);// 關閉接口void (…

目標檢測YOLO系列從入門到精通技術詳解100篇-【圖像處理】邊緣檢測

目錄 知識儲備 算法原理 邊緣檢測(Canny算子) Canny算子邊緣檢測流程 應用案例

[Linux] LAMP架構

一、LAMP架構架構的概述 LAMP 架構是一種流行的 Web 應用程序架構&#xff0c;它的名稱是由四個主要組件的首字母組成的&#xff1a; Linux&#xff08;操作系統&#xff09;&#xff1a; 作為操作系統&#xff0c;Linux 提供了服務器的基礎。它負責處理硬件資源、文件系統管理…

解讀 | 阿里通義千問模型全尺寸開源 “誠意滿滿“背后的名與利

大家好&#xff0c;我是極智視界&#xff0c;歡迎關注我的公眾號&#xff0c;獲取我的更多前沿科技分享 邀您加入我的知識星球「極智視界」&#xff0c;星球內有超多好玩的項目實戰源碼和資源下載&#xff0c;鏈接&#xff1a;https://t.zsxq.com/0aiNxERDq 12 月 1 日阿里開源…

基于Web和深度學習的辣椒檢測產量預測系統

1.研究背景與意義 項目參考AAAI Association for the Advancement of Artificial Intelligence 研究背景與意義 辣椒是一種重要的經濟作物&#xff0c;被廣泛種植和消費。然而&#xff0c;辣椒的產量預測一直是農業生產中的重要問題。準確地預測辣椒的產量可以幫助農民合理安…

第10節:Vue3 論點

如何在UniApp中使用Vue3框架創建論點&#xff1a; <template> <view> <text>{{ segments[currentSegment].content }}</text> </view> </template> <script> import { ref, computed } from vue; export default { setup…

高項備考葵花寶典-項目進度管理輸入、輸出、工具和技術(下,很詳細考試必過)

項目進度管理的目標是使項目按時完成。有效的進度管理是項目管理成功的關鍵之一&#xff0c;進度問題在項目生命周期內引起的沖突最多。 小型項目中&#xff0c;定義活動、排列活動順序、估算活動持續時間及制定進度模型形成進度計劃等過程的聯系非常密切&#xff0c;可以視為一…

【論文筆記】FSD V2: Improving Fully Sparse 3D Object Detection with Virtual Voxels

原文鏈接&#xff1a;https://arxiv.org/abs/2308.03755 1. 引言 完全稀疏檢測器在基于激光雷達的3D目標檢測中有較高的效率和有效性&#xff0c;特別是對于長距離場景而言。 但是&#xff0c;由于點云的稀疏性&#xff0c;完全稀疏檢測器面臨的一大困難是中心特征丟失&…

vFW搭建IRF

正文共&#xff1a;2328字 40圖&#xff0c;預估閱讀時間&#xff1a;5 分鐘 IRF&#xff08;Intelligent Resilient Framework&#xff0c;智能彈性架構&#xff09;技術通過將多臺設備連接在一起&#xff0c;虛擬化成一臺設備&#xff0c;集成多臺設備的硬件資源和軟件處理能…

C++如何通過調用ffmpeg接口對H265文件進行編碼和解碼

要對H265文件進行編碼和解碼&#xff0c;需要使用FFmpeg庫提供的相關API。以下是一個簡單的C程序&#xff0c;演示如何使用FFmpeg進行H265文件的編碼和解碼&#xff1a; 編碼&#xff1a; #include <cstdlib> #include <cstdio> #include <cstring> #inclu…

兩個月軟考-高項上岸

文章目錄 前言結緣軟考功虧一簣有始有終2個月計劃資料部分計劃截圖 總結 前言 我們看小說或者電視劇電影都會看到這樣的情節&#xff0c;主角一開始錦衣玉食&#xff0c;突然家道中落&#xff0c;啥都沒了&#xff0c;主角再一路奮起重新找回了屬于自己的一切&#xff1b;還有…

Vue項目中實現瀏覽器標簽頁名字的動態修改

修改router/index.js文件 路由條目下面添加meta屬性 meta:{title:DevOps運維平臺 }示例 使用Vue的全局守衛函數beforeEach&#xff0c;在路由切換前動態修改瀏覽器標簽頁名字 router.beforeEach((to,from,next) > {document.title to.meta.titlenext() })

Error: Cannot find module ‘E:\Workspace_zwf\mall\build\webpack.dev.conf.js‘

執行&#xff1a;npm run dev E:\Workspace_zwf\zengwenfeng-master>npm run dev> mall-app-web1.0.0 dev E:\Workspace_zwf\zengwenfeng-master > webpack-dev-server --inline --progress --config build/webpack.dev.conf.jsinternal/modules/cjs/loader.js:983thr…

[筆記]ARMv7/ARMv8 交叉編譯器下載

開發 Cortex-A7、Cortex-A72 或其他 ARM 架構 profile 芯片時&#xff0c;經常需要下載對應架構的交叉編譯器&#xff0c;所以寫這篇筆記&#xff0c;用于記錄一下交叉編譯器下載流程&#xff0c;免得搞忘。 編譯環境&#xff1a;ubuntu 虛擬機 下載地址 我們可以從 ARM 官網…

09 視頻分片上傳Minio和播放

文章目錄 一、流程設計1. 分片上傳實現思路2. 文件分片上傳流程3. 視頻播放流程 二、代碼實現1. 后端代碼2. 文件上傳前端代碼3. 視頻播放前端代碼 一、流程設計 1. 分片上傳實現思路 2. 文件分片上傳流程 3. 視頻播放流程 二、代碼實現 1. 后端代碼 pom.xml <dependenc…