排序算法入門之希爾排序(java實現)
希爾排序是對插入排序的改進。插入排序是前面元素已經有序了,移動元素是一個一個一次往後移動,當插入的元素比前面排好序的所有元素都小時,則需要將前面所有元素都往後移動。希爾排序有了自己的增量,可以理解為插入排序的增量為1,希爾排序增量是gap。代碼就是在插入排序代碼的基礎上多了一層增量變化的循環。可以參考http://www.cnblogs.com/chengxiao/p/6104371.html,博主作了詳盡介紹。
public static void shellSort(int[] a){
int j;
for(int gap=a.length/2;gap>0;gap/=2)
for(int i=gap;i<a.length;i++){
int tmp=a[i];
for(j=i;j>=gap&&tmp<a[j-gap];j-=gap)
a[j]=a[j-gap];
a[j]=tmp;
}
}
排序算法入門之希爾排序(java實現)
相關推薦
排序算法入門之希爾排序(java實現)
入門 介紹 插入 一次 變化 shells ngx i++ ava 希爾排序是對插入排序的改進。插入排序是前面元素已經有序了,移動元素是一個一個一次往後移動,當插入的元素比前面排好序的所有元素都小時,則需要將前面所有元素都往後移動。希爾排序有了自己的增量,可以理
圖解排序算法(二)之希爾排序
ima creat ray ngx spa 時間 有序 import 希爾 希爾排序是希爾(Donald Shell)於1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的一個更高效的版本,也稱為縮小增量排序,同時該算法是沖破O(n2)
算法七之希爾排序
sys 關鍵詞 alt spa 最終 https 最優 src middle 一、希爾排序 (1)簡介 希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序算法的一種更高效的改進版本。希爾排序是非穩定排序算法。該方法因DL.Shell於19
圖解算法系列之希爾排序
希爾排序 (1)演算法描述 對於給定的線性序列,將這個序列按照一定規則進行分組,每個小序列使用插入排序的方法排序。由於是每個分組進行排序,序列總體只是區域性有序,全域性還是無序的。因此全部的分組進行一次排序後,再將小分組劃分成更大的分組進行排序,直到只有一個分組,並且這個分組也是有序的。也就是說上面描述的
PHP排序算法系列:希爾排序
希爾排序 希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。 原理 先將整個待排元素序列分割成若干個子序列(由相隔某個“增量(gap)”的元素組成的)分別進行直接
JavaScript算法系列之-----------------鏈表反轉(JS實現)
bsp art eve ext list 通過 -- this str 題目:輸入一個鏈表,按鏈表值從尾到頭的順序返回一個ArrayList。 之前一直對JS實現鏈表理解不了,被算法大牛指點了一下豁然開朗。 function ListNode(x){ this
算法系列【希爾排序】篇
javascript算法希爾排序 python算法希爾排序 go算法希爾排序 java算法希爾排序 常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸並排序、快速排序、堆排序、基數排序等。用一張圖概括: 關於時間復雜度:1. 平方階 (O(n2)) 排序各類簡單
排序算法入門之選擇排序-Java實現
ati min .net 入門 oid 下標 static ava 對象數組 本文參考http://blog.csdn.net/m0_37568091/article/details/78023705 選擇排序是先從對象數組中選出最小的放在第一個位置,再從剩下的元素中選
排序算法入門之快速排序(java實現)
大小 ava 相對 其余 時間 個數 技術分享 算法 元素交換 快速排序也是一種分治的排序算法。快速排序和歸並排序是互補的:歸並排序將數組分成兩個子數組分別排序,並將有序的子數組歸並以將整個數組排序,會需要一個額外的數組;而快速排序的排序方式是當兩個子數組都有序
排序算法系列之直接插入排序
直接插入排序 1 基本原理 1 核心思想:插入排序通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入 ,如此重複,直至完成序列排序。 2 演算法分析:
算法基礎:整數拆分問題(Golang實現)
text else lang mod mark numbers com cti ase 一個整數總能夠拆分為2的冪的和。比如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1
動態規劃之完全揹包問題(java實現)
之前寫了01揹包問題,現在寫完全揹包問題。和01揹包不同的是,完全揹包不限定某種物品的件數,可以裝0,1,2,...,而01揹包只有裝與不裝的區別。但是思考問題的方式還是一樣的,我就其中的最大值。詳細程式碼和註釋見下面程式碼。 package backpack; /* f[i][v]:前i件物
設計模式之裝飾器模式(java實現)
裝飾器模式(Decorator):結構型設計模式,為了實現類在不修改原始類的基礎上進行動態的覆蓋或者增加方法,該實現保持了跟原有類的層級關係。這種設計模式允許向一個現有的物件新增新的功能,同時又不改變其結構。算是一種非常特殊的介面卡模式。 在實際業務中,有時候我們會建立了多層子類,但如果當子
劍指offer之變態跳臺階(Java實現)
變態跳臺階 NowCoder 題目描述: 一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。 ###解題思路: 關於本題,前提是n個臺階會有一次n階的跳法。分析如下: f(1) = 1 f(2)
資料結構之雙向連結串列(JAVA實現)
歡迎轉載,請附出處: http://blog.csdn.net/as02446418/article/details/47114711 最近重新複習了一些基礎的資料結構,發覺自己好多已經淡忘了,索性重新撿起來以前的知識,今天筆者回顧了一下連結串列的知識,用J
排序算法之希爾排序
java 排序算法 希爾排序希爾排序 先將整個待排序的序列分割成若幹個子序列分別進行直接插入排序,當整個序列的元素“基本有序”時,再對全體進行一次直接插入排序。需要註意的是,子序列的構成不是簡單的“逐段分割”,而是將相隔某個“增量”的記錄組成一個子序列,如第一趟增量為5,第二趟增量可以為3等等。
程序員需要掌握的排序算法之希爾排序(最小增量排序)
直接 info 排序算法 關鍵詞 基本思想 直接插入 下標 減少 print 希爾排序(最小增量排序) 基本思想:希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,算法便終
插入排序算法之希爾排序
back ... 步長 i++ 作用 運行時間 參考 ack bar 一、前沿: 希爾排序(Shell Sort)的名稱源於它的發明者Donald Shell,該算法是沖破了二次元時間屏障的算法之一。它通過比較相距一定間隔的元素工作,各趟所用的距離隨著算法的進行
基礎算法系列之排序演算法-7.希爾排序 並解決hdu 1425問題(java實現)
我們從最初的氣泡排序演算法,到上篇文章的折半插入排序演算法,我們一共學習了5種排序演算法,相信以大家的聰明才智肯定都消化了^_^。在本篇文章中,我們又將學習第6種排序演算法——希爾排序演算法。那就讓我們直奔主題吧。 希爾排序 讓我們回想一下直接插入排序演算
排序算法(3)--Insert Sorting--插入排序[3]--Shell Sort--希爾排序
每次 中移動 位置 空間 ups length 定義 span 面數據 1.基本思想 希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,算法便終止。 2.實現原理