我們分割待排序記錄的目的是減少待排序記錄的個數,並使整個序列向基本有序發展。而如上面這樣分完組後,就各自排序的方法達不到我們的要求。因此,我們需要採取跳躍分割的策略:將相距某個「增量」的記錄組成乙個子串行,這樣才能保證在子串行內分別進行直接插入排序後得到的結果是基本有序而不是區域性有序。
初始時,有乙個大小為 5的無序序列。
(1)在第一趟排序中,我們不妨設 gap1 = n / 2 = 2,即相隔距離為 5 的元素組成一組,可以分為 5 組。
(2)接下來,按照直接插入排序的方法對每個組進行排序。
在第二趟排序中,我們把上次的 gap 縮小一半,即 gap2 = gap1 / 2 = 1 (取整數)。這樣每相隔距離為 2 的元素組成一組,可以分為 2 組。
(3)按照直接插入排序的方法對每個組進行排序。此時,排序已經結束。
* 希爾排序
*/static void shellsort1(int a,int n)}}
}if (grp== 1)
}}
插入排序演算法 希爾排序
插入排序演算法 希爾排序 希爾排序思想是將陣列每次分成不同的陣列同時進行排序,劃分的方式是設定增量值,即h length 2,h 2 與直接排序最大的不同就是比較的陣列值下標間隔不同。希爾排序在資料量龐大的時候進行排序效率高,時間短。觀察下圖,根據以上思想,進行移動。如下 include void ...
插入排序之希爾排序
希爾排序也屬於插入類排序演算法。希爾排序通過縮小增量,將待排序元素劃分為若干個子串行,分別對各個子串行按照直接按照插入排序演算法進行排序。當增量為1時,待排序元素構成乙個子串行,對該序列排序完畢後希爾排序演算法結束。如下 include void shellsort int a,int length...
插入排序之希爾排序
直接插入排序與希爾排序相比還是有一些問題的。結論 當需要插入的數是比較小的數時,後移的次數明顯增多,對效率有影響。1 交換法 test public void testsort long start system.currenttimemillis bubblesorting array 氣泡排序排...