摘要:算法簡述希爾排序也叫作排序或縮小增量排序,據說是一個叫的人發明出來的,顧取名排序。這種排序是基于插入排序思想的,也比較適用于數據量大時。
算法簡述
希爾排序也叫作shell排序或縮小增量排序,據說是一個叫D.L.Shell的人發明出來的,顧取名shell排序。這種排序是基于插入排序思想的,也比較適用于數據量大時。
我剛開始看到時候對于插入排序也是半瓶子醋,直接導致我看不懂了,抓狂,so...我就去默默的補習一下插入排序嘍。
插入排序簡介插入排序的核心思想是比較和插入,就是從第二個數開始,依次插入到前面合適的位置。排序步驟如下:
1. 首先對數組的前兩個數據進行從小到大的排序 2. 接著將第3個數據與排序好的兩個數據進行比較,插入合適的位置 3. 然后,將第4個數據插入已經排好的前3個數據中 4. 不斷重復上述的過程,完成排序代碼實現
private void insertSort(int[] a) { int i,j,t,h; for(i =1;i=0&&t 簡單的介紹了一下插入排序,下面就講一下這個希爾排序。
排序步驟1.將有n個元素的數組分為n/2個數字序列,第1個數據和第n/2+1個數據為一對。。。 2.一次循環使每一個序列對排好順序(對每個序列使用插入排序算法,實質是一種分組插入) 3.然后,再變為n/4個序列,再次排序 4.不斷重復上述過程,隨著序列減少最后變為一個,也就完成了整個排序。實例講解比如對{12,31,11,20,17,30}進行希爾排序:
1. 第一次排序,首先將數組分為6/2=3個數字序列,第一個數據12和第四個數據20為一對,第二個數據和第五個數據為一對,第三個數據和第六個數據為一對,每一對進行排序后數據為:12,17,11,20,31,30 2. 第二次排序,將數組劃分為6/4=1(這里取整),此時逐個對數據比較,按照插入排序算法進行排序,排序后的數據為:11,12,17,20,30,31代碼片段private void shellSort(int[] a) { int i,j,h; int r,temp; int x = 0; for(r = a.length/2;r>=1;r/=2) { for(i = r;i=0&&temp 至此希爾排序就完成了,時間復雜度為O(nlog2n).
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64424.html
摘要:今天,一條就帶大家徹底跨過排序算法這道坎,保姆級教程建議收藏。利用遞歸算法,對分治后的子數組進行排序。基本思想堆排序是利用堆這種數據結構而設計的一種排序算法,堆排序是一種選擇排序,它的最壞,最好,平均時間復雜度均為,它也是不穩定排序。 ...
摘要:動態定義間隔序列參考來源詳細介紹了十種算法大家可以去學習下以后大概會盡量每天更新一個算法學習吧溫故而知新 參考書:嚴蔚敏-數據結構 希爾排序(Shells Sort) 希爾排序又稱縮小增量排序,歸屬于插入排序一類,簡單來說,和我們的插入排序比,它更快. 奇妙的記憶點: 內排序(內存排序就夠了) 不穩定(排序后原始順序無法保證) 希爾排序重點在于分割. 基本思想: 將整個待排序記錄序...
摘要:下面會介紹的一種排序算法快速排序甚至被譽為世紀科學和工程領域的十大算法之一。我們將討論比較排序算法的理論基礎并中借若干排序算法和優先隊列的應用。為了展示初級排序算法性質的價值,我們來看一下基于插入排序的快速的排序算法希爾排序。 前言 排序就是將一組對象按照某種邏輯順序重新排列的過程。比如信用卡賬單中的交易是按照日期排序的——這種排序很可能使用了某種排序算法。在計算時代早期,大家普遍...
摘要:前面介紹了七大算法的思想與實現步驟,下面來做一個歸總。直到無序區中的數為零,結束排序。步驟以從小到大為例,排序數組大小為。比較完以后則排序結束。堆排序思想堆排序是采用樹的形式的數據結構來進行排序的,其中每一個堆都是完全二叉樹。 前面介紹了七大算法的思想與實現步驟,下面來做一個歸總。 排序方法 平均復雜度 最壞復雜度 最好復雜度 輔助空間 穩定性 直接選擇排序 O(n^2...
閱讀 2316·2021-09-22 15:27
閱讀 3170·2021-09-03 10:32
閱讀 3499·2021-09-01 11:38
閱讀 2499·2019-08-30 15:56
閱讀 2213·2019-08-30 13:01
閱讀 1537·2019-08-29 12:13
閱讀 1419·2019-08-26 13:33
閱讀 893·2019-08-26 13:30