希爾排序是一種高效的排序演算法,原理是將大陣列分成若干個小陣列,對每個小陣列進行排序.之後縮短步長,對原陣列重新劃分小組,繼續對每個小組進行排序.直到步長變為1後,進行最後一次直接插入排序.
此演算法高效的原因在於直接插入排序在對基本有序的序列進行排序是十分高效的.前期劃分子陣列進行排序,可以逐漸使得較大的元素排列在原序列的尾部,符合插入排序高效的前提條件.
步長的經驗值以如下公式得出:
h1 = 1;
h(n) = 3*h(n-1)+1
演算法特點:
1.不穩定
2.時間複雜度o(n1.3)
3.終止條件,步長縮短為1.
演算法實現如下:
//combsort
//1. not stable
//2. time complex o(n1.3)
//3. space complecity, ?
//4. terminate condition, increase step decrease to 1
template
void sort::shellsort(t* const sortarray, const
unsigned
int size)
else
for (int i = increasearraynum - 2; i >= 0; i--)
else}}
}}
}return;
}
C 模板實現梳排序
梳排序是一種改進的氣泡排序演算法,通過比較元素彼此之間的步長位置這種方式先對資料進行預處理,在每次移動中,步長會越來越小,直至他等於1.這一理念就是在正式排序前先將一些大元素移動至陣列的底部.之後正式排序採用氣泡排序演算法來進行.大量試驗證明,步長縮短因子為1.3時,能達到較高的效率.梳排序的良好效...
c 實現類模板實現堆排序
1 首先你要會堆排序 可以點這裡看一下堆排序過程 2.使用類模板實現堆排序 include template class t 堆排序 void heapsort t t,int len template class t 調整堆 從上到下調整堆 void adjustheap t t,int poin...
C 模板實現佇列
我準備練習一下模板的知識,然後自己實現vector類。在這之前,先用模板實現乙個佇列來熱身吧。佇列的底層是鍊錶。主要是熟悉一下模板的寫法。另外,就是模板的定義和實現都要寫在乙個檔案中 export關鍵字可以避免這樣。還沒用過 所以倒數第二行我加了個 include queue.hpp 只能是hpp,...