【java實現+4種變體完整例子】排序算法中【插入排序】的詳細解析,包含基礎實現、常見變體的完整代碼示例,以及各變體的對比表格

以下是插入排序的詳細解析,包含基礎實現、常見變體的完整代碼示例,以及各變體的對比表格:
在這里插入圖片描述


一、插入排序基礎實現

原理

將元素逐個插入到已排序序列的合適位置,逐步構建有序序列。

代碼示例
public class InsertionSort {void sort(int[] arr) {int n = arr.length;for (int i = 1; i < n; i++) {int key = arr[i]; // 待插入的元素int j = i - 1;// 將比 key 大的元素后移while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key; // 插入到正確位置}}
}
復雜度分析
  • 時間復雜度
    • 最壞/平均:O(n2)(逆序或隨機數據)。
    • 最好(已有序):O(n)
  • 空間復雜度O(1)
  • 穩定性:穩定(相同值的元素相對順序不變)。

二、常見變體及代碼示例

1. 優化版(減少移動次數)

改進點:通過減少元素移動的次數,優化內層循環。
適用場景:數據接近有序時效率更高。

public class OptimizedInsertionSort {void sort(int[] arr) {int n = arr.length;for (int i = 1; i < n; i++) {int key = arr[i];int j = i - 1;// 找到插入位置后一次性移動元素while (j >= 0 && arr[j] > key) {j--;}// 將 j+1 到 i 的元素后移一位for (int k = i; k > j + 1; k--) {arr[k] = arr[k - 1];}arr[j + 1] = key;}}
}
2. 二分插入排序

改進點:用二分查找確定插入位置,減少比較次數。
適用場景:數據規模較大時,減少比較時間。

public class BinaryInsertionSort {void sort(int[] arr) {int n = arr.length;for (int i = 1; i < n; i++) {int key = arr[i];int left = 0, right = i - 1;// 二分查找插入位置while (left <= right) {int mid = (left + right) / 2;if (arr[mid] > key) {right = mid - 1;} else {left = mid + 1;}}// 移動元素并插入for (int j = i - 1; j >= left; j--) {arr[j + 1] = arr[j];}arr[left] = key;}}
}
3. 遞歸實現

改進點:用遞歸替代循環,代碼結構更清晰。
適用場景:教學或代碼風格偏好遞歸。

public class RecursiveInsertionSort {void sort(int[] arr, int n) {if (n <= 1) return;sort(arr, n - 1); // 先排序前 n-1 個元素int key = arr[n - 1];int j = n - 2;// 將比 key 大的元素后移while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}
}

三、變體對比表格

變體名稱時間復雜度空間復雜度穩定性主要特點適用場景
基礎插入排序O(n2)(平均/最壞),
O(n)(最好)
O(1)穩定簡單易實現,適合小規模或部分有序數據小數據或接近有序的場景
優化版(減少移動次數)O(n2)(平均/最壞),
O(n)(最好)
O(1)穩定減少內層循環的移動次數數據接近有序時效率提升
二分插入排序O(n2)(平均/最壞),
O(n log n)(比較次數)
O(1)穩定用二分查找減少比較次數數據規模較大時減少比較時間
遞歸實現O(n2)(所有情況)O(n)穩定遞歸替代循環,代碼結構清晰教學或代碼風格偏好遞歸的場景

四、關鍵選擇原則

  1. 基礎場景:優先使用基礎實現,因其簡單且適用于小規模數據。
  2. 優化需求
    • 接近有序數據:優化版(減少移動次數)可提升效率。
    • 大規模數據:二分插入排序通過減少比較次數優化性能。
  3. 代碼風格:遞歸實現適合教學或偏好函數式編程的場景,但需注意棧空間開銷。
  4. 穩定性需求:所有變體均穩定,適用于需要保持元素相對順序的場景(如排序帶鍵值的記錄)。
  5. 極端場景:已排序數據時,基礎實現的時間復雜度降至 O(n),是插入排序的優勢場景。

通過選擇合適的變體,可在特定場景下優化性能或代碼可讀性,同時保持算法的穩定性。

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

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

相關文章

清醒思考的藝術

成為穿越暴風雨后的幸存者 系統性錯誤是指系統性的偏離理性&#xff0c;偏離最理想的、合乎邏輯的、理智的思考和行為。 “系統”一詞很重要&#xff0c;因為我們經常錯誤地走向同一方向。 幸存偏誤 幸存偏誤會扭曲概率&#xff0c;系統性的高估了成功概率。一旦混淆選擇標準和…

DSA數據結構與算法 6

查找技術&#xff08;Searching Techniques&#xff09; 查找簡介 在計算機科學中&#xff0c;“查找”指的是在某個集合或序列中尋找特定元素的過程。這個過程可以是成功的&#xff0c;也可以是失敗的&#xff1a; 若目標元素存在于集合中&#xff0c;我們稱之為“查找成功”…

FastAPI:現代高性能Python Web框架的技術解析與實踐指南

一、FastAPI的誕生背景與技術定位 在數字化轉型的浪潮中,API(應用程序接口)作為連接服務與數據的核心樞紐,其性能與開發效率直接影響業務迭代速度。傳統Python框架如Django和Flask雖功能豐富,但在高并發場景下面臨性能瓶頸,且缺乏對異步編程的原生支持。FastAPI應運而生…

VuePress 使用教程:從入門到精通

VuePress 使用教程&#xff1a;從入門到精通 VuePress 是一個以 Vue 驅動的靜態網站生成器&#xff0c;它為技術文檔和技術博客的編寫提供了優雅而高效的解決方案。無論你是個人開發者、團隊負責人還是開源項目維護者&#xff0c;VuePress 都能幫助你輕松地創建和管理你的文檔…

1.Vue自動化工具安裝(Vue-cli)

目錄 1.node.js 安裝&#xff1a; 2 npm 安裝 3 安裝Vue-cli 4總結&#xff1a; 一般情況下&#xff0c;單文件組件&#xff0c;我們運行在 自動化工具vue-CLI中&#xff0c;可以幫我們編譯單文件組件。所以我們在學習時一般需要在系統中先搭建vue-CLI工具 下面就是一些我…

IP數據報

IP數據報組成 IP數據報&#xff08;IP Datagram&#xff09;是網絡中傳輸數據的基本單位。 IP數據報頭部 版本&#xff08;Version&#xff09; 4bit 告訴我們使用的是哪種IP協議。IPv4版本是“4”&#xff0c;IPv6版本是“6”。 頭部長度&#xff08;IHL&#xff0c;Intern…

Leetcode 2158. 每天繪制新區域的數量【Plus題】

1.題目基本信息 1.1.題目描述 有一幅細長的畫&#xff0c;可以用數軸來表示。 給你一個長度為 n 、下標從 0 開始的二維整數數組 paint &#xff0c;其中 paint[i] [starti, endi] 表示在第 i 天你需要繪制 starti 和 endi 之間的區域。 多次繪制同一區域會導致不均勻&…

Git Flow

Git Flow深度解析&#xff1a;企業級分支管理實戰指南 前言 在持續交付時代&#xff0c;分支策略決定團隊協作效率。Git Flow作為經典的分支管理模型&#xff0c;被Apache、Spring等知名項目采用。2023年JetBrains開發者調查報告顯示&#xff0c;Git Flow仍是中大型項目最常用…

[Swift]pod install成功后運行項目報錯問題error: Sandbox: bash(84760) deny(1)

操作&#xff1a; platform :ios, 14.0target ZKMKAPP do# Comment the next line if you dont want to use dynamic frameworksuse_frameworks!# Pods for ZKMKAPPpod Moyaend pod install成功后運行報錯 報錯&#xff1a; error: Sandbox: bash(84760) deny(1) file-writ…

[管理與領導-129]:向上管理-組織架構、股權架構、業務架構、流程架構,看每個人在組織中的位置和重要性

目錄 一、股權架構&#xff1a;反映所有權與控制權 二、組織架構&#xff1a;定義角色與匯報關系 三、業務架構&#xff1a;定義業務單元與價值鏈 四、流程架構&#xff1a;規范業務運作與協作 五、綜合分析&#xff1a;個人在組織中的綜合影響力 六、案例&#xff1a;某…

小紅書爬蟲,小紅書api,小紅書數據挖掘

背景&#xff1a; 小紅書&#xff08;Xiaohongshu&#xff09;是一款結合社交、購物和內容分享的移動應用&#xff0c;近年來在中國以及全球范圍內擁有大量的用戶群體。小紅書上的內容包括用戶的消費體驗、生活方式、旅行分享、時尚搭配等。通過這些內容&#xff0c;用戶可以了…

玩轉Docker | 使用Docker部署tududi任務管理工具

玩轉Docker | 使用Docker部署tududi任務管理工具 前言一、tududi介紹Tududi簡介核心功能特點二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署tududi服務下載鏡像創建容器創建容器檢查容器狀態檢查服務端口安全設置四、訪問tududi服務訪問tududi首頁登錄tu…

大屏設計與匯報:政務服務可視化實踐

大屏設計與匯報:政務服務可視化實踐 引言 在政務服務數字化轉型浪潮中,大屏設計成為展現業務能力與數據價值的關鍵手段。本文圍繞政務大屏設計,從設計要點、業務邏輯到匯報技巧展開深入探討,為相關從業者提供全面參考。 一、大屏設計核心要點 (一)多維度考量 設計大…

字節(抖音)golang后端

Golang知道哪些并發模式&#xff0c;你覺得哪個更好&#xff0c;為什么 在使用channel的時候有哪些需要考慮和注意的地方 進程和線程的區別 線程里有哪些字段 TCP和UDP的區別&#xff0c;各自的優劣勢 TCP 更適合需要可靠性、順序和連接管理的場景&#xff0c;如文件傳輸和網頁…

Python語法系列博客 · 第6期[特殊字符] 文件讀寫與文本處理基礎

上一期小練習解答&#xff08;第5期回顧&#xff09; ? 練習1&#xff1a;字符串反轉模塊 string_tools.py # string_tools.py def reverse_string(s):return s[::-1]調用&#xff1a; import string_tools print(string_tools.reverse_string("Hello")) # 輸出…

Unity運行時查看日志插件 (IngameDebugConsole)

Unity運行時查看日志插件 (IngameDebugConsole) 文章目錄 Unity運行時查看日志插件 (IngameDebugConsole)一、介紹二、使用步驟1.導入插件2.開始使用 結束 一、介紹 In-game Debug Console插件可以在打包發布以后&#xff0c;程序運行時方便的看到控制臺信息&#xff0c;在一些…

spark-SQL核心編程課后總結

通用加載與保存方式 加載數據&#xff1a;Spark-SQL的 spark.read.load 是通用加載方法&#xff0c;借助 format 指定數據格式&#xff0c;如 csv 、 jdbc 、 json 等&#xff1b; load 用于指定數據路徑&#xff1b; option 在 jdbc 格式時傳入數據庫連接參數。此外&#xff0…

蔡浩宇的AIGC游戲革命:從《原神》到《Whispers》的技術跨越

目錄 引言&#xff1a;游戲行業的AI革命前夜 一、《Whispers》的技術突破與市場挑戰 1.1 多模態AI技術的集成應用 1.2 與傳統游戲的差異化體驗 1.3 面臨的商業化難題 二、從《原神》到《Whispers》的技術演進 2.1 《原神》成功的時代因素分析 2.2 蔡浩宇的技術路線轉變 …

Spring Boot中定時任務Cron表達式的終極指南

Spring Boot中定時任務Cron表達式的終極指南 一、Cron表達式基礎二、Spring Boot中定時任務的實現三、Cron表達式高級用法四、調試與驗證技巧五、常見問題與解決方案六、最佳實踐總結 定時任務是后端開發中實現周期性業務邏輯的核心技術之一。在Spring Boot生態中&#xff0c;結…

國產SMT貼片機自主技術突破解析

內容概要 隨著電子信息產業對精密制造需求的持續升級&#xff0c;國產SMT貼片機的技術突破已成為裝備自主化進程的關鍵節點。本文聚焦設備研發的三大核心領域&#xff1a;高動態運動控制系統通過線性電機與數字信號處理技術的融合&#xff0c;將重復定位精度提升至5μm級別&am…