數據結構 -- 插入排序(直接插入排序和希爾排序)

插入排序

算法思想

每次將?個待排序的記錄按其關鍵字大小插入到前面已排好序的子序列中,直到全部記錄插入完成。

代碼實現
void InsertSort(int A[],int n){int i,j,temp;for(i = 1;i<n;i++){if(A[i]<A[i-1]){temp = A[i];			//用temp暫存A[i]for(j=i-1;j>=0&&A[j]>temp;--j)		//檢查所有前面已經排好序的元素A[j+1]=A[j];				//所有大于temp的元素都往后挪一位A[j+1]=temp;					//復制到插入位置}}
}
代碼實現(帶哨兵)
void Insert(A[],int n){int i,j;for(i = 2;i<=n;i++){if(A[i]<A[i-1]){A[0]=A[i];for(j=i-1;A[0]<A[j];--j)A[j+1]=A[j];A[j+1] = A[0];}}
}

優點:不需要每輪循環都判斷一次j>=0

算法效率分析
時間復雜度空間復雜度穩定性
O(1)主要來自對比關鍵字、移動 元素(若有n個元素 則需要 n-1 趟處理)穩定
最好情況:每次只需要對比一次 不需要移動→O(n)
最壞情況:原本都是逆序排放的 → O(n2)
平均時間復雜度:O(n2)
優化 – 折半插入排序

先用折半查找找到應該插入的位置,再移動元素

當low>high時折半查找停止,并將low之后的元素全部右移,并將A[0]復制到low所在位置

為了保證算法的穩定性,當A[mid]=A[0]時,應繼續在mid所指的右邊尋找插入位置

void InsertSOrt(int A[],int n){iint i,j,low,high,mid;for(i=2;i<=n;i++){A[0]=A[i];low = 1;high = i-1;while(low<=high){mid = (low+high)/2;if(A[mid]>A[0]) high = mid-1;else low=mid+1;}for(j=i-1;j>=high+1;--j)A[j+1]=A[j];A[high+1]=A[0];}
}

比起“直接插入排序”,比較關鍵字的次數減少了,但是移動元素的次數沒變,整體來看時間復雜度仍未O(n2)

在這里插入圖片描述

希爾排序

算法思想

先將待排序表分割成若干形如 L[i, i + d, i + 2d,…, i + kd] 的“特殊”子表,對各個子表分別進行直接插入排序。縮小增量d,重復上述過程,直到d=1為止。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

……

在這里插入圖片描述

//希爾排序
void ShellSort(int A[],int n){int d,i,j;//A[0]只是暫存單元,不是哨兵,當j<=0時,插入位置已到for(i=d/2;d>=1;d=d/2)for(i=d+1;i<=n;++i)if(A[i]<A[i-d]){A[0]=A[i];for(j = i-d;j>0&&)}
}

目前無法用數學?段證明確切的時間復雜度 ,最壞時間復雜度為 O(n2),當n在某個范圍內時,可達O(n1.3)

穩定性:不穩定

適?性:僅適?于順序表,不適?于鏈表

在這里插入圖片描述

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

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

相關文章

word中表格拉不動以及插入圖片有間距

word中的表格寬度和高度怎么調整都改不了&#xff0c;可以將選中表格—右鍵—段落—取消勾選下圖中的兩項。 word中表格插入圖片始終有間隙&#xff0c;怎么也消除不了間隙&#xff0c;可以在表布局—單元格邊距—修改上下左右邊距為0即可

網絡抓包命令tcpdump及分析工具wireshark使用

文章目錄 環境文檔用途詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 8,Linux x86-64 Red Hat Enterprise Linux 7,Linux x86-64 SLES 12,銀河麒麟 &#xff08;鯤鵬&#xff09;,銀河麒麟 &#xff08;X86_64&#xff09;,銀河麒麟&#xff08;龍…

Eigen矩陣存儲順序以及轉換

一、Eigen矩陣存儲順序 在矩陣運算和線性代數中,"行優先"(Row-major)和"列優先"(Column-major)是兩種不同的存儲方式,它們決定了多維數組(如矩陣)在內存中的布局順序。 1. 行優先(Row-major) 定義:矩陣按行順序存儲在內存中,即第一行的所有元…

快速部起一個Openwhisk平臺,使用telego k8s服務部署能力內網部署

Telego 簡介與 OpenWhisk 部署實踐 概述 Telego 是一個用于便攜式 Kubernetes 部署的工具&#xff0c;旨在解決容器鏡像拉取中的網絡代理問題。本文檔描述了如何通過 Telego 將 Apache OpenWhisk&#xff08;一個 Serverless 計算平臺&#xff09;部署到 Kubernetes 集群&…

LockSupport與Condition解析

本章我們介紹兩個Java 并發包中用于線程協作的工具--LockSupport和Condition LockSupport&#xff1a; Java 并發包&#xff08;java.util.concurrent.locks&#xff09;提供了基于許可&#xff08;permit&#xff09;的線程阻塞和喚醒機制--LockSupport 對于LockSupport是通…

【機器學習基礎】機器學習入門核心算法:邏輯回歸(Decision Tree)

機器學習入門核心算法&#xff1a;邏輯回歸&#xff08;Decision Tree&#xff09; 一、算法邏輯1.1 基本概念1.2 算法流程 二、算法原理與數學推導2.1 特征選擇指標信息熵&#xff08;ID3算法&#xff09;信息增益&#xff08;Information Gain&#xff09;信息增益率&#xf…

網絡編程3

管道的性質 讀緩沖區為空&#xff0c;read阻塞寫緩沖區為空&#xff0c;write阻塞一端先close&#xff0c;另一端繼續read&#xff0c;read不阻塞&#xff0c;立刻返回0一端先close&#xff0c;另一端繼續write&#xff0c;write會觸發SIGPIPE信號&#xff0c;進程異常終止 soc…

influxdb時序數據庫

以下概念及操作均來自influxdb2 官方文檔 InfluxDB2 is the platform purpose-built to collect, store, process and visualize time series data. Time series data is a sequence of data points indexed in time order. Data points typically consist of successive meas…

洛谷 P3372 【模板】線段樹 1

【題目鏈接】 洛谷 P3372 【模板】線段樹 1 【題目考點】 1. 線段樹 2. 樹狀數組 【解題思路】 本題要求維護區間和&#xff0c;實現區間修改、區間查詢。 可以使用樹狀數組或線段樹完成該問題&#xff0c;本文僅介紹使用線段樹的解法。 解法1&#xff1a;線段樹 線段樹…

軟件更新 | TSMaster 202504 版本已上線!三大功能讓車載測試更智能

車載測試的智能化時代正在加速到來&#xff01;TSMaster 202504 版本正式發布&#xff0c;本次更新聚焦以太網通信與數據高效處理&#xff0c;帶來三大核心功能升級—以太網報文信息過濾、XCP on Ethernet支持、按時間范圍離線回放&#xff0c;助力工程師更精準、更靈活地完成測…

java-單列集合list與set。

集合定位&#xff1a;存儲數據的容器 與數組的區別&#xff1a; 數組只能存儲同種數據類型數據&#xff0c;集合可以存儲不同類型的數據。 數組的長度一旦創建長度不可變&#xff0c;集合的長度是可變的 數組的操作單一&#xff0c;集合的操作比較豐富&#xff08;增刪改查&…

ai之pdf解析工具 PPStructure 還是PaddleOCR

目錄 重點是四 先用 PPStructure 版面分析,分成不同的塊兒,再選用 PaddleOCR、或PPStructure基礎路徑OCR模型配置OCR模型配置GPU配置硬件配置性能配置一、框架選型對比分析1. **PaddleOCR核心能力**2. **PP-Structure核心能力**3. **選型結論**二、錯誤根因分析與修復方案1. …

Android計算機網絡學習總結

TCP vs UDP 核心區別?? ?題目?&#xff1a;TCP為什么稱為可靠傳輸協議&#xff1f;UDP在哪些場景下比TCP更具優勢&#xff1f; ?得分要點?&#xff1a; ?可靠性機制? 三握四揮建立可靠連接確認應答&#xff08;ACK&#xff09; 超時重傳滑動窗口流量控制擁塞控制&…

深入解析Java組合模式:構建靈活樹形結構的藝術

引言&#xff1a;當對象需要樹形組織時 在日常開發中&#xff0c;我們經常需要處理具有層次結構的對象集合。比如&#xff1a; 文件系統中的文件夾與文件GUI界面中的容器與控件企業組織架構中的部門與員工 這類場景中的對象呈現明顯的整體-部分層次結構&#xff0c;如何優雅…

mobaxterm通過ssh登錄docker無圖形界面

1. 流程 下面是使用Mobaxterm通過SSH登錄Docker無圖形界面的步驟&#xff1a; 步驟 操作 1 在本地安裝Mobaxterm 2 配置Mobaxterm連接SSH 3 啟動Docker容器 4 在Mobaxterm中通過SSH連接到Docker容器 2. 操作步驟 步驟1&#xff1a;安裝Mobaxterm 首先&#xff…

【趙渝強老師】HBase的體系架構

HBase是大表&#xff08;BigTable&#xff09;思想的一個具體實現。它是一個列式存儲的NoSQL數據庫&#xff0c;適合執行數據的分析和處理。簡單來說&#xff0c;就是適合執行查詢操作。從體系架構的角度看&#xff0c;HBase是一種主從架構&#xff0c;包含&#xff1a;HBase H…

linux 新增驅動宏config.in配置

?1. 添加配置宏步驟? ?1.1 修改 Kconfig&#xff08;推薦方式&#xff09;? ?定位 Kconfig 文件? 內核各子目錄&#xff08;如 drivers/char/&#xff09;通常包含 Kconfig 文件&#xff0c;用于定義模塊配置選項7。?添加宏定義? 示例&#xff1a;在 drivers/char/Kc…

關于git的使用

下載git 可以去git的官網下載https://git-scm.com/downloads 也可以去找第三方的資源下載&#xff0c;下載后是一個exe應用程序&#xff0c;直接點開一直下一步就可以安裝了 右鍵任意位置顯示這兩個就代表成功&#xff0c;第一個是git官方的圖形化界面&#xff0c;第二個是用…

WPF【11_8】WPF實戰-重構與美化(UI 與視圖模型的聯動,實現INotifyPropertyChanged)

11-13 【重構】INotifyPropertyChanged 與 ObservableCollection 現在我們來完成新建客戶的功能。 當用戶點擊“客戶添加”按鈕以后系統會清空當前所選定的客戶&#xff0c;客戶的詳細信息以及客戶的預約記錄會從 UI 中被清除。然后我們就可以在輸入框中輸入新的客戶信息了&am…

ArkUI:鴻蒙應用響應式與組件化開發指南(一)

文章目錄 引言1.ArkUI核心能力概覽1.1狀態驅動視圖1.2組件化&#xff1a;構建可復用UI 2.狀態管理&#xff1a;從單一組件到全局共享2.1 狀態裝飾器2.2 狀態傳遞模式對比 引言 鴻蒙生態正催生應用開發的新范式。作為面向全場景的分布式操作系統&#xff0c;鴻蒙的北向應用開發…