希爾排序C/C++
阿新 • • 發佈:2018-04-18
長度 ID spa space 等於 算法分析 font 處理 分析
void ShellSort(int a[],int left,int right);
//對a[left]到a[right]從小到大排序
void ShellSort(int a[],int left,int right)
{
int len = right - left +1;
int gap,i,j,temp;
//Shell提出的增量選取規則n/2,n/4,...,2,1
for(gap=len/2;gap>0;gap/=2)
for(i=left+gap;i<=right;i++)
for(j=i-gap;j>=left && a[j]>a[j+gap];j-=gap){ // a[j]和a[j+gap]為一個子序列
temp = a[j]; /*當j-=gap後的子序列a[j],a[j+gap]已經處理則*/
a[j] = a[j+gap]; /*j-=gap僅是為了讓其退出本次循環,進而選取下一個子列*/
a[j+gap] = temp;
}
}
/*算法分析:
time-complexity: 與增量的選取有關,shell選取增量規則時間復雜度為O(n2),
帕佩爾諾夫(Papernov)和斯塔舍維奇(Stasevich)提出的 2的k次方+1,...,65,33,17,9,5,3,1
其中k為大於等於1的整數,2的k次方+1小於待排序列的長度,此時時間復雜度為O(n1.5次方)
space-complexity: O(1);
算法不穩定.
*/
希爾排序C/C++