zoukankan      html  css  js  c++  java
  • Shell排序

    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);
            }
        }
    }                                      
  • 相关阅读:
    HDU 2544 最短路
    HDU 3367 Pseudoforest
    USACO 2001 OPEN
    HDU 3371 Connect the Cities
    HDU 1301 Jungle Roads
    HDU 1879 继续畅通工程
    HDU 1233 还是畅通工程
    HDU 1162 Eddy's picture
    HDU 5745 La Vie en rose
    HDU 5744 Keep On Movin
  • 原文地址:https://www.cnblogs.com/ladawn/p/8297189.html
Copyright © 2011-2022 走看看