1、演算法描述希爾排序是一種遞減增量排序,當增量等於1的時候,就成了插入排序,因此希爾排序的最後一步就是普通的插入排序。
操作步驟
(1)、選擇步長di(1<=di<=n),對待排序列進行分割。所有距離為di的資料分到乙個組。
(2)、對每乙個組進行插入排序。
(3)、遞減步長,重複(1)(2),直到步長等於1
2、圖例
![](https://pic.w3help.cc/848/8510a0bfdddc294bb64cf303e469f.jpeg)
3、**
public void sort(int data)
data[j] = temp;
}d = d / 2;
} }
4、穩定性和複雜度穩定性:除非直接第一次就使用步長為1進行排序(那樣就成了直接插入排序),否則希爾排序是不穩定的排序。
平均時間複雜度:o(nlongn)
希爾排序的時間複雜度和步長序列的選擇有很大關係,好的步長序列能減少排序的時間複雜度。一般選擇n/2做第乙個步長,依次遞減為前一次的1/2,直到為1。已知的最好序列是marcin ciura設計(1,4,10,23,57,132,301,701,1750,…)
空間複雜度:o(1)
希爾排序 最壞時間 演算法篇 希爾排序
在之前的文章裡,我們講解了插入排序,而希爾排序相當於對插入排序的一種優化。在這裡我們簡單回顧下插入排序,插入排序的核心思想是,從陣列首位開始,通過遍歷,將相鄰的兩個元素進行排列,小的元素放在前面,大的元素放在後面,並使用遞迴,將調換位置的元素繼續與前面的元素進行比較,一直到前i個元素有序為止。然後重...
排序演算法之希爾排序
希爾排序實際上是一種分治思想的插入排序。插入排序不說了,不清楚看這裡 分治思想,對增量為dk,dk遞減,開始很多小序列,最後為乙個大序列 相對直接插入排序,在希爾排序中,只不過增量不是1,而是dk 較好的增量序列是2 k 1,2 k 1 1,7,3,1,這樣可使shell排序時間複雜度達到o n 1...
排序演算法之希爾排序
希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...