• ShellSort


    • 希尔排序(缩小增量排序)

    <script type="text/javascript">
    var obj={
        data:[0,3,11,5,7,4,8,9,5],
        length:8
        };
    //希尔排序(缩小增量排序)
    //思想:希尔排序是在直接插入排序的基础上得来的,直接插入在待排序的
    //序列基本有序(大的在后,小的在前)的情况下性能特别高,我们把待排序的序列分割成若干个基本有序的
    //子序列,对子序列进行直接插入排序,最后整个序列在进行一次直接插入排序,整个
    //序列就是有序的
    //具体的分组:把相隔一个增量的数作为一个子序列
    //时间复杂度:时间复杂度与增量的选取有关
    // method1:Math.floor(n/2k)。。。1 2的k次方分之n.k为次数,n为序列
    //序列长度 对应的时间复杂度为O(n2);
    // method2: 2k+1.。。1 2的k次方加一 最小的为1 时间复杂度为O(n1.5)
    //增量的选取原则 :好的增量序列的共同特征:
    //① 最后一个增量必须为1;
    //② 应该尽量避免序列中的值(尤其是相邻的值)互为倍数的情况。
    //空间复杂度:O(1)
    //稳定性:不稳定
    function ShellSort(obj)
    {
      var increment=obj.length;//增量
      var j;
      do
      {
        increment=Math.floor(increment/3)+1;
        //类似直接插入排序
        for(var i=1+increment;i<=obj.length;i++)
        {
          if(obj.data[i]<obj.data[i-increment])
          {
            obj.data[0]=obj.data[i];
            j=i-increment;
            while(j>0 && obj.data[0]<obj.data[j] )
            {
              obj.data[i]=obj.data[i-increment];
              j-=increment;
            }
            obj.data[j+increment]=obj.data[0];    
                }
           }
         } while(increment>1);
    }
    ShellSort(obj);
    console.log(obj.data);
    </script>

  • 相关阅读:
    贪婪匹配
    洛谷P1219 [USACO1.5]八皇后 Checker Challenge【搜索回溯】
    【数据结构笔记】栈
    数据结构课堂笔记
    DAY1
    小记2020.1.10
    c++复习
    c++用流控制成员函数输出数据
    c++用控制符控制输出格式
    "中国东信杯"广西大学第二届程序设计竞赛E Antinomy与红玉海(二分)
  • 原文地址:https://www.cnblogs.com/yiluhuakai/p/7679746.html
Copyright © 2020-2023  润新知