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);
            }
        }
    }                                      
  • 相关阅读:
    DBSCAN密度聚类
    特征工程之特征预处理
    特征工程之特征表达
    特征工程之特征选择
    Adaboost,GBDT和XGboost算法
    036 Go操作NSQ
    035 Go操作Redis
    034 Go操作MySQL
    033 protobuf初识
    032 二进制协议gob及msgpack介绍
  • 原文地址:https://www.cnblogs.com/ladawn/p/8297189.html
Copyright © 2011-2022 走看看