1. 程式人生 > >希爾排序C/C++

希爾排序C/C++

長度 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++