上一次的演算法旅行帶領大家一起體驗了我們的交換排序和交換排序的優化——快速排序,今天和大家一起探索插入排序和希爾排序
眾所周知,希爾排序是插入排序的優化,所以首先我們來了解插入排序,所謂插入排序,基本思想就是依次將每個記錄插入到乙個已排好的有序表中。
//**
int array = ;
#region
for (int i = 1; i < array.length; i++)
array[j + 1] = temp;
}#endregion
首先外層迴圈從下標號為1的位置開始,內層迴圈從下標為零的位置,開始進行比較,(公升序)如果左邊的數大於右邊的數,則進行交換(或者進行覆蓋)
ok我們了解了插入排序,接下來我們來學習學習希爾排序,它是簡單插入排序的高效能版本,也成為縮小增量排序。
第一次分的步長為4,每乙個數走五步找到自己對應的數字,組成一組
{10,1}
{5,6}
{4,2}
{3,9}
對這四組分別進行插入排序,然後再次分組,接下來就看一看**是如何變化的吧!
//**
int array = ;
for (int gap = array.length / 2; gap >= 1; gap = gap / 2)
array[j + gap] = temp;
}
排序演算法之希爾排序
希爾排序實際上是一種分治思想的插入排序。插入排序不說了,不清楚看這裡 分治思想,對增量為dk,dk遞減,開始很多小序列,最後為乙個大序列 相對直接插入排序,在希爾排序中,只不過增量不是1,而是dk 較好的增量序列是2 k 1,2 k 1 1,7,3,1,這樣可使shell排序時間複雜度達到o n 1...
排序演算法之希爾排序
希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...
排序演算法之希爾排序
希爾排序,突破了 通過交換相鄰元素進行排序的任何演算法平均需要 n 2 的二次時間限制 通過比較相距一定間隔的元素來工作。使用乙個增量序列 h1 1,h2,ht,在使用乙個 增量h的一趟排序後,對於每乙個i滿足pdata i pdata i h 即此時序列是h排序的 各趟 比較所用的距離逐漸減小,直...