希爾排序(shell sort)是插入排序的一種。是針對直接插入排序演算法的改進。該方法又稱縮小增量排序,
希爾排序基本思想:
先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序;然後,取第二個增量d2shellsort函式:按遞增順序對v[0]...v[n-1]進行排序
void shellsort(int v, int n)插入排序演算法思路:/* shellsort: sort v[0]...v[n-1] into increasing order */
void shellsort(int v, int n)
}
假定這個陣列的序是排好的,然後從頭往後,如果有數比當前外層元素的值大,則將這個數的位置往後挪,直到當前外層元素的值大於或等於它前面的位置為止.這具演算法在排完前k個數之後,可以保證a[1…k]是區域性有序的,保證了插入過程的正確性.
演算法描述:
一般來說,插入排序都採用in-place在陣列上實現。具體演算法描述如下:
1. 從第乙個元素開始,該元素可以認為已經被排序
2. 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
3. 如果該元素(已排序)大於新元素,將該元素移到下一位置
4. 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
5. 將新元素插入到該位置中
6. 重複步驟2
(如果比較操作的代價比交換操作大的話,可以採用二分查詢法來減少比較操作的數目。該演算法可以認為是插入排序的乙個變種,稱為二分查詢排序。)
void insertsort(char array, int n)}
插入排序與希爾排序
插入排序是一種非常古老的排序思想,他的過程可以被形象的模擬出來 假設乙個人要摸起一副被打亂的撲克牌,我們注意到,剛開始時這個人手上並沒有牌,並且他每次只從牌堆中摸出一張牌,每當摸上一張牌時,他選擇從右向左 即從大到小 將這張牌與手中原有的牌進行比較,並最終將其插入到自己手牌中適合的位置,當牌堆中的牌...
插入排序與希爾排序
插入排序描述 有乙個陣列num n 它有n個元素,假設其中n 1已經排好序了,那麼把剩餘的那個元素插入到合適的位置即可,這樣就完成了排序。根據這個思想,很明顯的可以使用遞迴來完成它。下面是遞迴版本的 include using namespace std void insertionsort int...
插入排序和希爾排序(C語言)
下屬專案 測試用例數量 插入排序無1 希爾排序無1 插入排序的關鍵在於 當前元素 比如第1個元素是當前元素 前面的序列 比如第0個元素構成的序列 都是有序的,再把當前元素 第1個元素 插入到這個有序序列 第0個元素構成的序列 中,於是形成多了乙個元素的有序序列 即第0個 第1個元素構成的有序序列 i...