2希尔排序-直接插入排序改进版

无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序......最后选择增量为1,即使用直接插入排序,使最终数组成为有序。

本文采用首选增量为n/2,以此递推,每次增量为原先的1/2,直到增量为1;

平均时间复杂度:希尔排序的时间复杂度和其增量序列有关系,这涉及到数学上尚未解决的难题;不过在某些序列中复杂度可以为O(n1.3);空间复杂度:O(1)  

稳定性:不稳定


void  shsort( int s[], int n )
{
    int i, j, d, t;
    d = n / 2;
    while( d >= 1)
    {
        for( i = d +1; i <= n; i++)
        {
            s[0] = s[i];
            j = i - d;
            while((j > 0) && ( s[0] < s[j] ) )
            {
                s[j + d] = s[j];
                j = j-d;
            }
            s[ j + d ] = s[0];
        }
        d = d / 2;
    }
 
}


发布了11 篇原创文章 · 获赞 6 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览