C語言希爾排序詳解與實例

希爾排序(Shell Sort),是由Donald Shell在1959年提出的一種排序算法。它是插入排序的一種高效改進版,通過引入“增量”概念,將原本的線性查找轉換為分段查找,從而顯著提升了排序效率。本文將深入探討希爾排序的原理、步驟及其實現代碼。點贊加關注謝謝😜

希爾排序的基本原理? ? ? ? 源代碼在文章最后

希爾排序的核心在于它使用了不同的增量序列來分組元素,然后再對各組進行插入排序。初始時,增量較大,使得元素之間的距離遠大于1,這樣就可以對相隔較遠的元素進行排序,之后逐步減小增量,直到最后增量為1,此時算法退化為普通的插入排序。

算法步驟

1. 選擇增量:首先選擇一個增量序列t1, t2, ..., tk,其中ti > tj, tk = 1。

2. 分組并排序:按照增量ti,將所有元素分為ti個子序列,對每個子序列進行插入排序。

3. 減小增量:重復步驟2,但每次使用增量序列中的下一個值,直至增量為1。

4. 最終排序:當增量為1時,執行一次插入排序,完成整個排序過程。

C語言代碼實現

下面是一個使用希爾排序對整型數組進行排序的C語言代碼示例:

#include <stdio.h>

void shellSort(int arr[], int n) {

? ? int gap, i, j, temp;

? ? // 動態生成增量序列

? ? for (gap = n / 2; gap > 0; gap /= 2) {

? ? ? ? // 對每一個子序列進行插入排序

? ? ? ? for (i = gap; i < n; i++) {

? ? ? ? ? ? temp = arr[i];

? ? ? ? ? ? j = i;

? ? ? ? ? ? // 插入排序

? ? ? ? ? ? while (j >= gap && arr[j - gap] > temp) {

? ? ? ? ? ? ? ? arr[j] = arr[j - gap];

? ? ? ? ? ? ? ? j -= gap;

? ? ? ? ? ? }

? ? ? ? ? ? arr[j] = temp;

? ? ? ? }

? ? }

}

?

int main() {

? ? int arr[] = {64, 34, 25, 12, 22, 11, 90};

? ? int n = sizeof(arr)/sizeof(arr[0]);

?

? ? printf("Original array:\n");

? ? for (int i = 0; i < n; i++) {

? ? ? ? printf("%d ", arr[i]);

? ? }

? ? printf("\n");

?

? ? shellSort(arr, n);

?

? ? printf("Sorted array:\n");

? ? for (int i = 0; i < n; i++) {

? ? ? ? printf("%d ", arr[i]);

? ? }

? ? printf("\n");

?

? ? return 0;

}

總結

希爾排序通過引入增量序列,巧妙地提升了插入排序的效率。雖然其最壞情況下的時間復雜度仍為O(n^2),但在實踐中,通過合理選擇增量序列,希爾排序通常能展現出接近O(n log n)的平均性能,使其成為處理大量數據時的一個實用選項。

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

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

相關文章

SRC漏洞挖掘技巧:修改返回包的各種姿勢

聽說大家都在要星標&#xff0c;我也要一個吧&#xff0c;可以把我的公眾號打上小星星嗎&#xff1f;~ 又雙叕周一了&#xff0c;還是老樣子&#xff0c;來篇技術向的給大家提提神吧~ 如果你對漏洞挖掘或技術向不感興趣&#xff0c;那么到這就可以了&#xff0c;不用再繼續往下…

【刪庫跑路】一次刪除pip下載的所有第三方庫方法

進入命令行&#xff0c;先list看下庫存 pip list導出所有的第三方庫至一文件列表 pip freeze >requirements.txt按照列表卸載所有庫 pip uninstall -r requirements.txt -y再list看下&#xff0c;可見庫存已清空

1、課程導學(react+區塊鏈實戰)

1、課程導學&#xff08;react區塊鏈實戰&#xff09; 1&#xff0c;課程概述&#xff08;1&#xff09;課程安排&#xff08;2&#xff09;學習前提&#xff08;3&#xff09;講授方式&#xff08;4&#xff09;課程收獲 2&#xff0c;ibloackchain&#xff08;1&#xff09;安…

java:字符緩沖流特有功能

BufferedWriter&#xff1a; void newLine&#xff08;&#xff09;&#xff1a;寫一行行分隔符&#xff0c;行分隔符字符串由系統屬性定義 BufferedReader&#xff1a; public String readLine&#xff08;&#xff09;&#xff1a;讀一行文字&#xff0c;結果包含行的內容的字…

振動分析-11-軸承數據庫之深度學習一維故障分類Transformer

Pytorch-Transformer軸承故障一維信號分類(三) 1 制作數據集 import pandas as pd filename = "CWRU_1797.csv" df = pd.read_csv(filename)from sklearn.model_selection import train_test_split df_x=df.drop(labels=1024,axis=1)

AI賦能OFFICE 智能化辦公利器!

ONLYOFFICE在線編輯器的最新版本8.1已經發布&#xff0c;整個套件帶來了30多個新功能和432個bug修復。這個文檔編輯器無疑成為了辦公軟件中的翹楚。它不僅支持處理文本文檔、電子表格、演示文稿、可填寫的表單和PDF&#xff0c;還允許多人在線協作&#xff0c;并支持AI集成&…

java Pair怎么使用

文章目錄 1. 簡介2. Pair類的來源3. 如何使用Pair類4. Pair類的實際應用5. Pair類的優點和缺點 1. 簡介 什么是Pair Pair是一個通用的數據結構&#xff0c;用于存儲一對關聯的對象&#xff0c;也就是兩個元素。這兩個元素可以是任何類型&#xff0c;并且它們之間沒有特定的層次…

哪些獨立站外鏈策略最有效?

在當前的SEO領域中&#xff0c;獨立站外鏈策略的效果差異很大&#xff0c;但GPB外鏈無疑是其中最為有效的一種。GPB外鏈&#xff0c;指的是通過高質量、包收錄且dofollow的頂級域名獨立站來獲得外鏈&#xff0c;這種外鏈策略能夠顯著提升目標網站的整體排名數據。 關鍵詞排名的…

redis學習(007 實戰:黑馬點評:登錄)

黑馬程序員Redis入門到實戰教程&#xff0c;深度透析redis底層原理redis分布式鎖企業解決方案黑馬點評實戰項目 總時長 42:48:00 共175P 此文章包含第25p-第p34的內容 文章目錄 短信登錄功能session 共享問題 短信登錄功能 接口編寫 這里是Result的封裝 過濾器在攔截器的外層…

go語言的堆排序實現

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、intheap的堆排序接口二、節點的堆排序實現三、leetcode 23. 合并 K 個升序鏈表 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 一、in…

淘寶詳情的 API 探秘:獲取與運用全攻略

在電商領域&#xff0c;淘寶無疑是一座巨大的寶庫&#xff0c;其中豐富的商品詳情信息對于商家、開發者和數據分析人員來說具有極高的價值。而通過 API 接口來獲取淘寶詳情&#xff0c;則為我們打開了一扇高效獲取這些信息的大門。 一、為什么要獲取淘寶詳情 首先&#xff0c;…

嵌入式系統中的實時操作系統任務調度策略

嵌入式系統中的實時操作系統任務調度策略 在嵌入式系統中&#xff0c;實時任務調度是確保系統響應性和穩定性的關鍵方面之一。不同的任務調度策略可以影響系統的性能和實時性。本文將深入探討兩種常見的實時任務調度策略&#xff1a;固定優先級調度和循環時間片調度&#xff0…

mysql查詢語句執行流程

流程圖 連接器&#xff1a;建立連接&#xff0c;管理連接、校驗用戶身份&#xff1b;查詢緩存&#xff1a;查詢語句如果命中查詢緩存則直接返回&#xff0c;否則繼續往下執行。MySQL 8.0 已刪除該模塊&#xff1b;解析 SQL&#xff0c;通過解析器對 SQL 查詢語句進行詞法分析、…

阿爾泰科技與西安交通大學陜西省某技術重點實驗室共謀未來!

近日&#xff0c;阿爾泰科技的電子工程師&#xff08;熊工&#xff09;應邀前往西安交通大學陜西省某技術重點實驗室&#xff0c;參與課題組項目的測試與調試工作。此次合作不僅成功推動了項目的進展&#xff0c;還為未來的深入合作奠定了堅實基礎。 阿爾泰科技作為領先的測控技…

基于SpringBoot構造超簡易QQ郵件服務發送(分離-圖解-新手)

目錄 獲取QQ 授權碼 SpringBoot構建 依賴 Yaml配置 服務編寫 測試 獲取QQ 授權碼 https://mail.qq.com/ 接著后就會有對應的密鑰了 SpringBoot構建 依賴 這里的建議是 2.0系列的Springboot版本用低一點的郵件依賴 <!-- 電子郵件 --> <dependency>&…

物聯網實戰:STM32+ESP8266溫濕度數據采集上傳Linux服務器與數據庫可視化(附代碼示例)

摘要: 本文將手把手教你搭建一個完整的物聯網數據監控平臺&#xff0c;使用STM32采集溫濕度數據&#xff0c;通過ESP8266 WiFi模塊上傳至Linux服務器&#xff0c;并利用Python腳本將數據存儲到MySQL數據庫&#xff0c;最后實現每日平均值的計算和可視化展示。 關鍵詞: STM32, …

抖音本地生活火爆!普通人如何申請抖音本地生活服務商?

當前&#xff0c;隨著抖音外賣的正式開放&#xff0c;抖音本地生活的熱度也迎來了新的高潮&#xff0c;與抖音本地生活服務商怎么申請等話題相關的詞條更是成為了多個創業者社群的熱搜榜單的常客。 事實上&#xff0c;就抖音本地生活服務商怎么申請等問題本身而言&#xff0c;…

nvm安裝報錯(鏡像問題)

一、問題報錯 安裝的時候如果跟著網上早些時候的配置&#xff0c;調整了setting文件&#xff0c;配置鏡像的話&#xff0c;可能報這個錯誤。 這個是因為他沒檢索到后面的鏈接地址&#xff0c;因為鏡像的地址新的已經更換了。使用這個吧&#xff1a; node_mirror: https://npm…

java基礎01—根據源碼分析128陷阱以及如何避免128陷阱

源碼分析128陷阱 如上圖所示&#xff0c;int類型數據超過127依舊能正常比較&#xff0c;但Integer類型就無法正確比較了 /*** Cache to support the object identity semantics of autoboxing for values between* -128 and 127 (inclusive) as required by JLS.** The cache …

Python 文件操作:打開數據處理的大門

在 Python 的學習之旅中&#xff0c;文件操作是一個非常實用且必不可少的技能。不論是數據分析還是日常的數據處理&#xff0c;良好的文件操作技巧都能讓你的編程之路更加順暢。今天&#xff0c;我將帶你走進 Python 文件操作的世界&#xff0c;不僅教你如何讀寫文件&#xff0…