码迷,mamicode.com
首页 > 编程语言 > 详细

Shell排序

时间:2018-01-17 00:44:11      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:gpo   增量   img   style   一个   间隔   技术分享   元素   print   

1. 排序原理
                           技术分享图片技术分享图片
2.  基本思想
     设初始序列有n个元素,选定一个小于n大于或等于1的整数gap作为间隔,将全部元素分成gap个子序列,所有距离为gap的元素放在同一个子序列中,在每个子序列中分别采用直接插入算法进行排序;然后缩小间隔gap,如令gap=gap/2,重复上面的子序列划分和子序列排序动作;直到最后去gap=1,将所有的元素放到一个序列中为止。
        技术分享图片
3. C++程序实现:
void shellsort(std::vector<int> & a)
{
  // gap:增量,每次除以2,或者除以3然后+1
    for(int gap = a.size()/2; gap>0;gap/=2)  //增量gap
    {
      // i:以gap增量分组的 “组号编号 ”,因为从i=gap之后的i++都一定有gap分组
        for(int i=gap;i<a.size();i++)
        {
            int tmp = a[i];
            int j=i;
        // j:对每组的 i 之前的数进行插入排序
           for(; j>=gap; j=j-gap)
            {
                if(tmp < a[j-gap])
                {
                    a[j] = a[j-gap];
                }
                else
                {
                    break;
                }
            }
            a[j] = tmp;
            print(a);
        }
    }
}                                      
技术分享图片

Shell排序

标签:gpo   增量   img   style   一个   间隔   技术分享   元素   print   

原文地址:https://www.cnblogs.com/ladawn/p/8297189.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!