希爾 Shell 排序 C

2021-07-11 21:01:58 字數 427 閱讀 7298

希爾排序是乙個很有意思的排序演算法,就是在選擇不同的增量序列時演算法的效率會有顯著的不同。更有意思的是它和dijkstra演算法都有相似之後,就是剛發明的時候並不知道有那麼厲害(特別是dijkstra,自己都不知道自己發明的這個演算法有沒有用)。

希爾排序類似插入排序,但是不是乙個個的掃瞄,根據增量數列的值來比較,比如增量數列h1, h2, h3…,第一次使用hn,第二次使用hn-1,依次使用。

例子中使用gap假設為陣列容量的一半,之後依次取半值,也可以使用乙個陣列儲存增量序列。

template

void shellsort( vector

& a)

}

希爾的實現不是很麻煩,選好了增量序列還是很有效率的。

希爾(Shell)排序

希爾 shell 排序 2 平方級時間複雜度,但當然也沒有線性排序演算法的o n 級的線性時間複雜度,對於大型資料輸入,線性演算法肯定是最佳的選擇,但對於中規模資料而言,希爾排序無疑是最佳的選擇。演算法大師knuth在他的著作 計算機程式設計藝術 給出的希爾排序的平均時間複雜度為o n 1.3 介於...

希爾shell排序

include include include typedef int type define n 100000 void exchange type a,int a,int b void selectionsort type a,int n void insertionsort type a,in...

希爾排序 Shell

希爾排序的實質就是分組插入排序,該方法又稱縮小增量排序。該方法的基本思想是 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序 增量足夠小 時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基...