希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。但希爾排序是不穩定排序演算法。
希爾排序是基於插入排序的以下兩點性質而提出改進方法的:
插入排序在對幾乎已經排好序的資料操作時, 效率高, 即可以達到線性排序的效率
但插入排序一般來說是低效的, 因為插入排序每次只能將資料移動一位
希爾排序的基本思想是:先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行依次直接插入排序。
演算法步驟:
1)選擇乙個增量序列t1,t2,…,tk,其中ti>tj,tk=1;
2)按增量序列個數k,對序列進行k 趟排序;
3)每趟排序,根據對應的增量ti,將待排序列分割成若干長度為m 的子串行,分別對各子表進行直接插入排序。僅增量因子為1 時,整個序列作為乙個表來處理,表長度即為整個序列的長度。
shell排序演算法實現**:
#define _crt_secure_no_warnings
#include #include#include //插入排序 穩定
void insert_sort(int array,int len)
//插入
array[k] = tmp; }}
//shell插入排序 穩定
void shell_sort(int array,int len)
//插入
array[k] = tmp;
} } while (gap>1); }
//選擇排序 每輪找出最小的一次和最前面的交換
//第一輪 找出最小的 和0號位置的交換
//第二輪 從剩下的找出最下的 和1號位置交換
//第三輪 從剩下的找出最小的 和2號位置交換
void select_sort(int array,int len)
} tmp = array[index];
array[index] = array[i];
array[i] = tmp; }}
void printarray(int array,int len)
{ int i = 0;
for (i=0;i
各種排序演算法總結:
排序演算法 希爾排序
如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...
排序演算法 希爾排序
摘要 排序演算法有很多,最簡單的有氣泡排序和插入排序,這兩種方法都具有o n 2 的時間界.我們想要討論的是具有更好的時間界的排序演算法,比如希爾排序.1 希爾排序的思路是通過比較一定間距的元素來進行排序,最後再對所有相鄰元素進行一次插入排序.2 希爾排序最重要的引數是增量序列 h1,h2,ht 只...
排序演算法 希爾排序
希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,...