插入排序和希爾排序

目錄

前言

一.插入排序

1.思想

2.實現

3.特點

二,希爾排序

1.思想

2,實現

3.特點


前言

????????排序算法是計算機科學中的基礎工具之一,對于數據處理和算法設計有著深遠的影響。了解不同排序算法的特性和適用場景,能夠幫助程序員在特定情況下選擇最合適的算法,從而提高程序的效率和性能。本節我們講述插入排序和希爾排序。

一.插入排序

1.思想

插入排序基本思想是將一個元素逐個插入到已經排好序的元素序列中,從而得到一個新的有序序列。插入排序的步驟如下:

  1. 初始狀態: 假設第一個元素已經是有序序列,可以將其視為一個只包含一個元素的序列。

  2. 從第二個元素開始: 將當前元素與已經排好序的元素比較,找到合適的位置插入。

  3. 插入操作: 將當前元素插入到合適的位置,同時調整其他元素的位置,以保持已有序序列的有序性。

  4. 重復: 重復步驟2和步驟3,直到所有元素都被插入到有序序列中,整個序列變得有序。

2.實現

void InsertSort(int* a, int n)
{for (int i = 0; i < n - 1; i++){int end = i;int tmp=a[end+1];while (end >= 0){if (tmp < a[end]){a[end + 1] = a[end];end--;}else{break;}}a[end + 1] = tmp;}
}

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

空間復雜度O(1)

穩定性:穩定

3.特點

1.優勢:

  1. 對小型數據集的適用性: 插入排序在對小型數據集或基本有序的數據集進行排序時表現良好。

  2. 適用于鏈表: 插入排序在對鏈表進行排序時也是一種有效的選擇,因為它可以通過改變節點的鏈接來進行排序,而無需移動大量數據。

  3. 穩定性: 插入排序是一種穩定的排序算法,即相等元素的相對順序在排序前后保持不變。

2,缺點:

  1. 時間復雜度: 插入排序的平均和最壞情況時間復雜度均為O(n^2),其中n是數組的長度。這使得插入排序在處理大規模數據時效率相對較低,

  2. 對逆序數據的性能較差: 當輸入數據基本逆序排列時,插入排序的性能會顯著下降。每次插入都需要移動大量的元素,導致算法效率低下。

二,希爾排序

1.思想

????????插入排序在數組接近有序的時候效率較高,我們就先嘗試讓數組接近有序.再使用插入排序,這是希爾排序

????????基本思想是通過將待排序的元素分組,對每組使用插入排序,然后逐步減小每組的元素數量,最終完成整個序列的排序。希爾排序的主要思想包括以下幾個步驟:

  1. 分組數: 選擇一個遞減的序列(,這個序列的最后一個元素通常是1。常見的步長序列選擇有希爾自己提出的 N/2(其中N是數組長度)或其他更復雜的序列。

  2. 分組: 將待排序的元素按照步長分成若干個子序列,每個子序列相互獨立。

  3. 對每個子序列進行插入排序: 對每個子序列應用插入排序算法,將子序列內的元素進行排序。

  4. 減小組: 縮小步長,重復步驟2和步驟3,直到步長為1。

  5. 最終插入排序: 當步長為1時,整個序列基本有序,此時使用插入排序對整個序列進行一次排序。

2,實現

void ShellSort(int* a, int n)
{int gap=n;while (gap > 1){gap = gap / 3 + 1;for (int j = 0; j < gap; j++){for (int i = 0; i < n - gap; i += gap){int end = i;int tmp = a[end + gap];while (end >= 0){if (tmp < a[end]){a[end + gap] = a[end];end-=gap;}else{break;}}a[end + gap] = tmp;}}}
}

????????第一個while循環控制每一組的元素個數,當每一組的元素個數為1是,相當于插入排序,第一個for循環和第二個for循環控制對每一組進行插入排序

時間復雜度:大約O(n^1.3)

空間復雜度O(1)

穩定性:不穩定

3.特點

1.優勢:

  1. 相對簡單: 希爾排序的實現相對簡單,不需要使用遞歸,只涉及到循環和插入排序的基本思想。這使得它在理解和實現上相對容易。

  2. 原地排序: 希爾排序是一種原地排序算法,它只需要一個常數級別的額外空間用于存儲臨時變量,而不需要額外的數據結構。

  3. 相對高效: 對于中等規模的數據集,希爾排序通常比插入排序和冒泡排序等簡單排序算法更高效。它通過逐步減小間隔,先對較遠距離的元素進行排序,然后逐漸縮小間隔,最終完成整體排序。這樣可以使得部分元素在更早的階段就趨于有序,減少了插入排序的工作量。

2.缺點

  1. 不穩定性: 希爾排序不是穩定的排序算法。當存在相等元素時,它可能會改變它們的相對順序。在某些應用場景中,需要保持相等元素的相對位置關系,這時候希爾排序可能不是最佳選擇。

  2. 不適合小規模數據集: 盡管希爾排序對于中等規模的數據集表現較好,但對于小規模數據集,其性能可能不如一些簡單的排序算法。例如,對于10個或更少的元素,插入排序可能更為高效。

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

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

相關文章

如何使用玻璃材質制作3D鉆石模型

在線工具推薦&#xff1a; 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 當談到游戲角色的3D模型風格時&#xff0c;有幾種不同的風格&#xf…

Spark與PySpark(1.概述、框架、模塊)

目錄 1.Spark 概念 2. Hadoop和Spark的對比 3. Spark特點 3.1 運行速度快 3.2 簡單易用 3.3 通用性強 3.4 可以允許運行在很多地方 4. Spark框架模塊 4.1 Spark Core 4.2 SparkSQL 4.3 SparkStreaming 4.4 MLlib 4.5 GraphX 5. Spark的運行模式 5.1 本地模式(單機) Local運行模…

初識Vue 解決vue在啟動時生成的提示

讓我為大家簡單介紹一下吧&#xff01; Vue是一套用于構建用戶界面的漸進式javaScript框架 當我們引入vue.js后 <script src"../js/vue.js"></script>我們發現&#xff0c;當我們打開網頁時&#xff0c;控制臺會出現以下內容 那我們該怎么解決呢&…

【設計模式--結構型--組合模式】

設計模式--結構型--組合模式 組合模式定義結構案例組合模式的分類優點使用場景 組合模式 定義 又稱部分整體模式&#xff0c;是用于把一組相似的對象當作一個單一的對象。組合模式依據樹型結構來組合對象&#xff0c;用來表示部分以及整體層次&#xff0c;這種類型的設計模式…

新增模板中心和系統設置模塊,支持飛書平臺對接,DataEase開源數據可視化分析平臺v2.1.0發布

這一版本的功能升級包括&#xff1a;新增模板中心&#xff0c;用戶可以通過模板中心的模板快速創建儀表板和數據大屏&#xff1b;新增“系統設置”功能模塊&#xff0c;該模塊包含系統參數、認證設置、嵌入式管理、平臺對接四個子模塊。在“系統參數”子模塊中&#xff0c;用戶…

代碼上傳的gitee平臺

1.首先我們訪問工作臺 - Gitee.com進行注冊和登錄 2.我們創建一個倉庫&#xff1a; 3.在本地創建我們的項目 在這文件夾里面我們打開git bush,執行 一下操作&#xff1a; git init &#xff1a;初始化倉庫 git status&#xff1a;檢查狀態 git add . &#xff1a;將當前文件…

ubuntu 命令行安裝 conda

安裝包地址&#xff1a; Index of / 找到對應的版本&#xff0c;右鍵點復制鏈接 wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.shbash Anaconda3-2023.09-0-Linux-x86_64.sh https://linzhji.blog.csdn.net/article/details/126530244

BERT大模型:英語NLP的里程碑

BERT的誕生與重要性 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;大模型標志著自然語言處理&#xff08;NLP&#xff09;領域的一個重要轉折點。作為首個利用掩蔽語言模型&#xff08;MLM&#xff09;在英語語言上進行預訓練的模型&…

Keepalived+Nginx實現高可用(上)

一、背景與簡介 為了服務的高可用性&#xff0c;避免單點故障問題&#xff0c;通常我們使用"冗余設計思想"進行架構設計。冗余設計思想&#xff0c;本質就是將同一個應用或者服務放置在多臺不同的服務器上[雞蛋不放在同一個籃子里]&#xff0c;這樣減少整體服務宕機的…

ACWing week 3(C語言) 725.完全數

一個整數&#xff0c;除了本身以外的其他所有約數的和如果等于該數&#xff0c;那么我們就稱這個整數為完全數。 例如&#xff0c;66 就是一個完全數&#xff0c;因為它的除了本身以外的其他約數的和為 1236 現在&#xff0c;給定你 N 個整數&#xff0c;請你依次判斷這些數是…

ESP32網絡開發實例-搭建ESP32固件遠程升級服務器

搭建ESP32固件遠程升級服務器 文章目錄 搭建ESP32固件遠程升級服務器1、ESP32設備自動升級流程2、軟件準備3、硬件準備4、代碼實現4.1 固件升級服務器代碼實現4.2 基礎固件代碼4.3 新固件代碼實現我們在前面的文章中,已經實現了OTA方式升級固件的兩種方式:在Arduino IDE 中升…

數據結構與算法-動態規劃-機器人達到指定位置方法數

機器人達到指定位置方法數 來自左程云老師書中的一道題 【題目】 假設有排成一行的 N 個位置&#xff0c;記為 1~N&#xff0c;N 一定大于或等于 2。開始時機器人在其中的 M 位置上&#xff08;M 一定是 1&#xff5e;N 中的一個&#xff09;&#xff0c;機器人可以往左走或…

基于大語言模型的復雜任務認知推理算法CogTree

近日&#xff0c;阿里云人工智能平臺PAI與華東師范大學張偉教授團隊合作在自然語言處理頂級會議EMNLP2023上發表了基于認知理論所衍生的CogTree認知樹生成式語言模型。通過兩個系統&#xff1a;直覺系統和反思系統來模仿人類產生認知的過程。直覺系統負責產生原始問題的多個分解…

10 # 類:繼承和成員修飾符

類的基本實現 類的成員屬性都是實例屬性&#xff0c;而不是原型屬性&#xff0c;類的成員方法都是原型方法。 class Dog {constructor(name: string) {this.name name;}name: string;run() {} }console.log(Dog.prototype); let dog new Dog("wangwang"); consol…

知識筆記(五十四)———mysql比較varchar值大小_Mysql varchar大小長度問題

1、限制規則 字段的限制在字段定義的時候有以下規則&#xff1a; a) 存儲限制 varchar 字段是將實際內容單獨存儲在聚簇索引之外&#xff0c;內容開頭用1到2個字節表示實際長度(長度超過255時需要2個字節)&#xff0c;因此最大長度不能超過65535。 b) 編碼長度限制 字符類…

低功耗模式的通用 MCU ACM32F0X0 系列,具有高整合度、高抗干擾、 高可靠性的特點

ACM32F0X0 系列是一款支持多種低功耗模式的通用 MCU。集成 12 位 1.6 Msps 高精度 ADC 以及比 較器、運放、觸控按鍵控制器、段式 LCD 控制器&#xff0c;內置高性能定時器、多路 UART、LPUART、SPI、I2C 等豐富的通訊外設&#xff0c;內建 AES、TRNG 等信息安全模塊&#xff0…

kubeadm搭建單master多node的k8s集群--小白文,圖文教程

參考文獻 K8S基礎知識與集群搭建 kubeadm搭建單master多node的k8s集群—主要參考這個博客&#xff0c;但是有坑&#xff0c;故貼出我自己的過程&#xff0c;坑會少很多 注意&#xff1a; 集群配置是&#xff1a;一臺master&#xff1a;zabbixagent-k8smaster&#xff0c;兩臺…

C++類和對象——(10)綜合示例

一、示例對象數組&#xff1a; #include<iostream> using namespace std;class Point{private:int x,y;public:Point(int px0,int py0){xpx;ypy;}void init(int px0,int py0){xpx;ypy;}void print(){cout<<"("<<x<<","<<y…

FFmpeg的AVInputFormat

文章目錄 結構體定義操作函數支持的AVOutputFormat 通過上面的分析&#xff0c;基本可以看到ffmpeg的套路了&#xff0c;首先一個context上下文&#xff0c;上下文里面一個priv_data 指針&#xff0c;然后再插件結構體中有一個priv_data_size&#xff0c;然后回調函數。 結構體…

JVM-GC調優-字節碼篇-01

筆記來源&#xff1a;JVM 注意&#xff1a;實在想學習可以看一下&#xff0c;讓自己更加了解JVM&#xff0c;看起來可能會枯燥。 JVM-概述 1、你的問題 1.1你被JVM傷害過嗎&#xff1f; 你是否也遇到過這些問題&#xff1f; 運行著的線上系統突然卡死&#xff0c;系統無法訪…