希爾排序:前面介紹過插入排序,要提高演算法效率,我們必須一次消去不止1個逆序對,比如交換相隔較遠的2個元素,所以這裡引入希爾排序,每次交換的兩個元素相隔較遠,所以一次交換消除不止一對逆序對,會加快排序過程。
hibbard 增量序列
sedgewick增量序列
//o(n^d) o(1)
#includeusing namespace std;
void shellsort(vector& arr) ;
for (si = 0; sedgewick[si] >= n; si++) {} //初始的增量sedgewick[si]不能超過待排序列長度
for (d = sedgewick[si]; d > 0; d = sedgewick[++si])
arr[i] = tmp;
} }}int main() ;
shellsort(arr);
for (auto x : arr)
cout << endl;
system("pause");
return 0;
}
1 2 3 4 5 6 7 8 9 10
請按任意鍵繼續. . .
效能分析:原始希爾排序的增量序列是n/2,會出現增量元素不互質,則小的增量可能根本不起作用,所以採用hibbard增量序列或者sedgewick增量序列。由於隔位進行交換,所以不是穩定的排序演算法。 資料結構基礎整理 排序 02 希爾排序
希爾排序 shell s sort 是插入排序的一種又稱 縮小增量排序 diminishing increment sort 是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於1959年提出而得名。在希爾排序之前的排序演算法時間複雜度都是 void ...
排序 希爾排序
希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...
排序 希爾排序
縮小增量排序 待排序列按關鍵字基本有序時,直接插入排序的效率很高 希爾排序思想 將整個待排記錄分割為若干子串行分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全體記錄進行一次直接插入排序,就可以完成整個排序工作 增量序列中的值沒有除1以外的公因子,且最後乙個增量必須等於1 子串行的構成不是逐...