希爾排序時對插入排序的優化,當較小元素在靠後位置時,將會發生大量的移位,效率比較低下,而希爾排序通過分組使得後面的元素移到前面只需要很少的移位就可以完成,隨著分組的的容量逐漸減少,等到分組容量為1的時候排序基本完成了,再使用插入排序就只涉及很少的移位了;
思路:一開始另分組容量為length/2,每次迴圈都要/2直到容量為1,對於每乙個容量,對第二組及後面的所有元素進行插入排序,步長就是此時的組容量;
平均時間複雜度為nlogn,最好情況下也就是已經按順序排列好就不會進入while迴圈了,所以此時複雜度為nlogn,最壞情況下就是nlog²n
**如下:
static
void
shellsort2
(int
arr)
arr[index + step]
= temp;}}
}
學習筆記 希爾排序
將乙個一維陣列從小到大排序。希爾排序是插入排序的優化方式,因為普通的插入排序會存在乙個問題,那就是當比較小的數字排在後面時,需要後移很多次才能完成。由此,希爾排序的思路是 引入乙個步長的因素gep。之前的冒泡也好選擇也好插入也好,都是之間跟之前或之後的一個數字進行比較,然後再 或 而希爾排序簡單來說...
筆記 希爾排序
插入排序 將待排序元素分為已排序子集和未排序子集,一次從未排序子集中的乙個元素插入已排序子集中,使已排序自己仍然有序 重複執行以上過程,指導所有元素都有序為止。希爾排序又稱為縮小增量排序,它也是一種屬插入排序類的方法,但在事件效率上較前述集中排序方法都有較大的改進。從對直接插入排序的分析得知,其演算...
演算法筆記 希爾排序
希爾排序是直接插入排序 的改進版,對於待排序序列的不同情況效率相近。1.演算法思想 先選取乙個小於n的增量d1,把序列中所有元素分成n d1個組,所有距離為d1的倍數的元素在同一組中,在各組內執行直接插入排序。然後選取乙個更小的增量d2,重複上述分組和排序過程 繼續減小增量,直至增量為1,即所有元素...