希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。但希爾排序是非穩定排序演算法。
演算法思想:
希爾排序的基本思想是:先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行依次直接插入排序。
演算法步驟:
1.選擇乙個增量序列t1,t2,…,tk,其中ti>tj,tk=1;一般t1=n/2; t2=t1/2;以此類推;
2.按增量序列個數k,對序列進行k 趟排序;
3.每趟排序,根據對應的增量ti,將待排序列分割成若干長度為m 的子串行,分別對各子表進行直接插入排序。僅增量因子為1 時,整個序列作為乙個表來處理,表長度即為整個序列的長度。
核心**:
void
print
(int a,
int n ,
int i)
cout<
}void
shellinsertsort
(int a,
int n,
int dk)
print
(a, n, i);}
}}// 先按增量dk=n/2,n為要排序數的個數進行希爾排序
void
shellsort
(int a,
int n)
}// 主函式
intmain()
;shellsort
(a,9);
//希爾插入排序法
print
(a,9,9);}
希爾排序 Shell s Sort
希爾排序又叫縮小增量排序,是1959年 shell 發明的第乙個突破o n2 的排序演算法,是簡單插入排序的改進版。它與插入排序的不同之處在於,它會優先比較距離較遠的元素。這種排序是把一定間隔的數當做乙個陣列,在每個分好的陣列裡進行插入排序,再縮小間隔重複步驟,直到間隔為1,直接插入排序所有數。這樣...
排序(1) 希爾排序(Shell s Sort)
假設有這樣一組數 如果我們以步長為 5開始進行排序 13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10然後我們對每列進行排序 即小的數放前 10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45將上述四行數字,依序接...
插入排序 希爾排序(Shell s Sort)
希爾排序 shell sort 是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因dl shell於1959年提出而得名。先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄 基本有序 時,再對全體記錄進...