一、簡介和思想
希爾演算法:希爾排序是插入排序的一種又稱「縮小增量排序」,是簡單插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法,因 d.l.shell 於 1959 年提出而得名。演算法的思想圖示例如有這麼個陣列
int
list =
;// 陣列長度為10
初始增量=陣列長度/2, gap=list.length/2,得到gap=5,那麼就將這個原始陣列分為5組(相同顏色用線連線的為一組)
得到這一組後、每一組的之間的元素進行比較、從小到大就小的放前面、大的放後面,然後得到。
繼續進行分組 gap=gap/2 得到gap=2.5,向下取整得gap=2,分組如下
排序後
繼續分組 gap=gap/2 得到 gap=1 。
再根據這一組進行排序得到如下
分步**實現(交換法)
第一次分組排序
int
list =
;int temp =0;
int num =1;
// 第一次排序
// gap = 5
int gap = list.length/2;
for(
int i = gap; i < list.length; i++)}
}for
(int i:list)
system.out.
println(""
);
第二次分步排序(在第一次分步的基礎之上)
gap = list.length/2/
2;//第二次排序
for(
int i = gap; i < list.length; i++)}
}for
(int i:list)
system.out.
println(""
);
第三次分步排序(在第一和二次分步的基礎之上)
gap = list.length/2/
2/2;
//第三次排序
for(
int i = gap; i < list.length; i++)}
}for
(int i:list)
system.out.
println(""
);
總結得到、兩個巢狀的for迴圈的內容都是一樣的只有gap發生變化得到
public
static
void
main
(string[
] args)
;int temp =0;
int num =1;
int gap = list.length/2;
while
(gap>0)
}}system.out.
println
("第"
+num++
+"次排序");
使用交換法這個**是老師的寫的, 個人還不能理解這段**的意思。
public
static
void
main
(string[
] args)
;int num =1;
for(
int gap = list.length/
2; gap >
0; gap/=2)
list[j]
= temp;}}
system.out.
println
("第"
+ num++
+"次排序");
演算法筆記 希爾排序
希爾排序是直接插入排序 的改進版,對於待排序序列的不同情況效率相近。1.演算法思想 先選取乙個小於n的增量d1,把序列中所有元素分成n d1個組,所有距離為d1的倍數的元素在同一組中,在各組內執行直接插入排序。然後選取乙個更小的增量d2,重複上述分組和排序過程 繼續減小增量,直至增量為1,即所有元素...
基礎演算法筆記四 希爾排序
希爾排序是對直接插入排序的改進,非穩定的排序演算法,使得該改進後的插入排序對非有序序列進行排序時所需時間減少,但是對於基本有序序列進行排序時時間有所增加,但是對於基本有序序列進行排序對比冒泡和選擇時間還是有優勢。基本思想 確定開始的增量,一般都是序列大小除以2。之後不斷除以2,縮減增量。根據增量對序...
希爾排序演算法
希爾排序演算法是對插入排序的一種改進,其核心是減少已排序區域的右移次數來提高速度。具體做法是先獲得乙個間隔數值 h,然後將 n 1 替換成 n h 來完成插入排序。具體例子 元素集合 2,9,5,1,8,3,6,4,7,0 間隔數值 h 4 第一次迴圈 當前元素 array 4 8,那麼 n h 4...