SpringCloud大型企業分散式微服務雲架構原始碼之【資料結構】-排序-希爾排序
希爾排序:
希爾排序法又稱縮小增量法。希爾排序法的基本思想是:
先選定一個整數,把待排序檔案中所有記錄分成個組,所有距離為的記錄分在同一組內,並對每一組內的記錄進行排序。然後,取,重複上述分組和排序的工作。當到達=1時,所有記錄在統一組內排好序。
需要框架原始碼的朋友可以看我個人簡介聯絡我, 。
插入排序時:陣列接近有序的時候,時間複雜度趨於O(N)。
希爾排序是對於直接插入排序的優化,通過預排序使陣列趨於有序
希爾排序的分為預排序(gap > 1)和直接插入( gap == 1)排序兩步驟。
分組預排序使陣列接近有序:
假設 gap = 3,按照gap分組,對每一組進行插入排序。
對gap(gap=3)組預排序完畢:
對一組gap進行單趟排序:
//參考插入排序 for (int i = 0; i < n - gap; i += gap) { //當gap==1時就為直接插入排序 int end = 0; int x = a[end + gap]; while (end >= 0) { if (a[end] > x) { a[end + gap] = a[end]; end -= gap; } else { break; } } a[end + gap] = x; }
對gap(gap=3)組排序完畢:
int gap = 3; for (int j = 0; j < gap; j++) { for (int i = j; i < n - gap; i += gap) { // 對其中一組進行單趟的插入排序 int end = i; int x = a[end + gap]; while (end >= 0) { if (a[end] > x) { a[end + gap] = a[end]; end -= gap; } else { break; } } a[end + gap] = x; } }
進一步優化:
void ShellSort(int* a, int n) { int gap = n; //若判斷條件為gap>=1則當gap=1時會多排一次 while (gap > 1) { //gap /= 2; gap = gap / 3 + 1; for (int i = 0; i < n - gap; ++i) { // 對一個gap組的一個單趟排序 int end = i; int x = a[end + gap]; while (end >= 0) { if (a[end] > x) { a[end + gap] = a[end]; end -= gap; } else { break; } } a[end + gap] = x; } } }
希爾排序的特性總結:
1. 希爾排序是對直接插入排序的優化。
2. 當gap > 1時都是預排序,目的是讓陣列更接近於有序。當gap == 1時,陣列已經接近有序的了,這樣就
會很快。這樣整體而言,可以達到優化的效果。我們實現後可以進行效能測試的對比。
3. 希爾排序的時間複雜度不好計算,因為gap的取值方法很多,導致很難去計算,因此在好些樹中給出的希爾排序的時間複雜度都不固定:
4. 穩定性:不穩定
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006413/viewspace-2849882/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 4、【創業必備企業架構】SpringCloud大型企業分散式微服務雲架構原始碼之MySQL 連線創業架構SpringGCCloud分散式微服務原始碼MySql
- SpringCloud大型企業分散式微服務雲架構原始碼之Springboot 重點知識點整理GCCloud分散式微服務架構原始碼Spring Boot
- 25、【創業必備企業架構】SpringCloud分散式微服務雲架構原始碼之MySQL 匯出資料創業架構SpringGCCloud分散式微服務原始碼MySql
- 關於SpringCloud大型網際網路分散式企業微服務雲架構SpringGCCloud分散式微服務架構
- [第二十四篇]——Docker 命令大全之SpringCloud大型企業分散式微服務雲架構原始碼DockerSpringGCCloud分散式微服務架構原始碼
- 【分散式微服務企業快速架構】SpringCloud分散式、微服務、雲架構快速開發平臺分散式微服務架構SpringGCCloud
- SpringCloud企業分散式微服務雲架構快速開發平臺原始碼SpringGCCloud分散式微服務架構原始碼
- springcloud微服務分散式雲架構-SpringCloud簡介SpringGCCloud微服務分散式架構
- SpringCloud大型企業分散式微服務雲架構原始碼之CAS SSO單點登入服務端環境搭建SpringGCCloud分散式微服務架構原始碼服務端
- [第二十三篇]——Docker 安裝 Apache之SpringCloud大型企業分散式微服務雲架構原始碼DockerApacheSpringGCCloud分散式微服務架構原始碼
- 【PHP資料結構】插入類排序:簡單插入、希爾排序PHP資料結構排序
- springcloud微服務分散式雲架構簡介SpringGCCloud微服務分散式架構
- (一)springcloud微服務分散式雲架構-SpringCloud簡介SpringGCCloud微服務分散式架構
- Spring Cloud大型網際網路分散式企業微服務雲架構SpringCloud分散式微服務架構
- 二十九、java版 SpringCloud分散式微服務雲架構之Java 資料結構JavaSpringGCCloud分散式微服務架構資料結構
- SpringCloud大型企業分散式微服務雲架構原始碼+CAS SSO單點登入服務端環境搭建SpringGCCloud分散式微服務架構原始碼服務端
- SpringCloud大型企業分散式微服務雲架構原始碼+CAS SSO單點登入客戶端環境搭建SpringGCCloud分散式微服務架構原始碼客戶端
- python演算法與資料結構-希爾排序(35)Python演算法資料結構排序
- 【資料結構與演算法】高階排序(希爾排序、歸併排序、快速排序)完整思路,並用程式碼封裝排序函式資料結構演算法排序封裝函式
- Spring Cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- 企業分散式微服務雲架構快速開發平臺原始碼分散式微服務架構原始碼
- 資料結構上機——希爾排序(含監視哨版本)資料結構排序
- (三)springcloud微服務分散式雲架構-SpringCloud整合專案簡介SpringGCCloud微服務分散式架構
- 整合spring cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- Spring Cloud微服務分散式雲架構 - 整合企業架構的技術點SpringCloud微服務分散式架構
- (四)整合spring cloud雲服務架構 - 企業分散式微服務雲架構構建SpringCloud架構分散式微服務
- 11.Spring Cloud 分散式、微服務、雲架構企業快速開發架構之Linux 磁碟管理SpringCloud分散式微服務架構Linux
- (二)spring cloud微服務分散式雲架構 - 整合企業架構的技術點SpringCloud微服務分散式架構
- (二)spring cloud微服務分散式雲架構-整合企業架構的技術點SpringCloud微服務分散式架構
- spring cloud springboot mybatis 分散式 微服務 架構原始碼CloudSpring BootMyBatis分散式微服務架構原始碼
- 微服務分散式架構之redis篇微服務分散式架構Redis
- 三十三、java版 SpringCloud分散式微服務雲架構之Java HashSetJavaSpringGCCloud分散式微服務架構
- java版 SpringCloud分散式微服務雲架構之Java Iterator(迭代器)JavaSpringGCCloud分散式微服務架構
- 對資料結構和演算法的總結和思考(三)--希爾排序資料結構演算法排序
- 7.Spring Cloud 分散式、微服務、雲架構企業快速開發架構之Linux 遠端登入SpringCloud分散式微服務架構Linux
- PHP 排序演算法之希爾排序PHP排序演算法
- 希爾排序排序
- JAVA漢諾塔遞迴 之SpringCloud企業分散式微服務雲架構快速開發平臺Java遞迴SpringGCCloud分散式微服務架構