插入排序的
演算法複雜度為o(n2),但如果序列為正序可提高到o(n),而且直接插入排序演算法比較簡單,希爾排序利用這兩點得到了一種改進後的插入排序。
希爾排序:將無序陣列分割為若干個子串行,子串行不是逐段分割的,而是相隔特定的增量的子串行,對各個子串行進行插入排序;然後再選擇乙個更小的增量,再將陣列分割為多個子串行進行排序......最後選擇增量為1,即使用直接插入排序,使最終陣列成為有序。
增量的選擇:在每趟的排序過程都有乙個增量,至少滿足乙個規則 增量關係 d[1] > d[2] > d[3] >..> d[t] = 1 (t趟排序);根據增量序列的選取其時間複雜度也會有變化,這個不少**進行了研究,在此處就不再深究;
本文採用首選增量為n/2,以此遞推,每次增量為原先的1/2,直到增量為1;
下圖詳細講解了一次希爾排序的過程:
二 **
public class shellsort
sortlist[k + step] = temp;}}
}public static void main(string args) ;
shellsort.shellsort(testarray);
system.out.println("the result is:");
for (integer item : testarray)
}
}
執行結果
理解希爾排序
最近回顧了一下the c programming language,其中提到了乙個用來演示 for 迴圈的小例子,如下 shell sort void shellsort int,int int main int b shellsort b,10 void shellsort int v,int n...
希爾排序的理解
希爾排序是插入排序的一種高效演算法,遞增量排序。我理解為步數排序 因為每次進行一次迴圈的時候,會給這次迴圈乙個跨度 也就是你一次能邁多少步 void sort int a,int length int step 0 這個while迴圈,目的是找出對於當前陣列下,最大的步數,也就是最多能擴多少,到最後...
希爾排序的理解
public static void shellsort int arr int j int temp for int gap arr.length 2 gap 0 gap 2 for int i gap i 這裡的 i gap就是插入排序的第二個數,j就是第乙個位置的數,i之所以是加一也要理解,當...