首页 > 系统服务 > 详细

ShellSort

时间:2017-10-17 09:18:15      阅读:275      评论:0      收藏:0      [点我收藏+]
  • 希尔排序(缩小增量排序)

<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>

ShellSort

原文:http://www.cnblogs.com/yiluhuakai/p/7679746.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!