通過巨集觀上分陣列長度/2的數量,然後在各組進行插入排序,接著在這個分組的數量在/2,以此往復.先讓序列的有序性得到極大的提高,然後在進行最後的插入
**如下(示例):
public
static
void
shellsort
(int
a)//如果j位置與i位置還是一樣的,說明他比該組前面的都大if(
!(i == j))}
}}
i=grp:體現的是插入演算法,我們預設第一位是有序的,往有序中插入//以步長為起點,因為時不斷向前面的有序列表中插入
for(
int i = grp; i < a.length; i++){
//j變數用來執行插入演算法
int j = i;
temp = a[j]
;
步長代表的時組別:判斷是否大於0是為了讓該組後面的陣列有可以和前面的資料全部判斷的可能性
temp:存放著要插入的資料
//是否已經和該組的有序列表判斷完了 and 從小到大,只有後面的比前面的小才找到位子
while((
(j - grp)
>=0)
&&(temp < a[j - grp]))
{ a[j]
= a[j - grp]
; j = j - grp;
排序 希爾排序
希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...
排序 希爾排序
縮小增量排序 待排序列按關鍵字基本有序時,直接插入排序的效率很高 希爾排序思想 將整個待排記錄分割為若干子串行分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全體記錄進行一次直接插入排序,就可以完成整個排序工作 增量序列中的值沒有除1以外的公因子,且最後乙個增量必須等於1 子串行的構成不是逐...
排序 希爾排序
希爾排序是插入排序中的乙個分支,但是較簡單插入排序又有較大的改進,這使得它成為了歷史上第一批突破二次時間屏障的排序演算法之一哦。它是通過比較一定間隔的元素來工作的。因此希爾排序又稱為縮小增量排序。直接插入排序對於原始資料基本有序的情況下,效率較高。在此的基礎上。我們可以想辦法,使資料基本有序,然後利...