希尔排序

本文详细介绍了希尔排序算法的实现原理及步骤,并通过JavaScript代码示例展示了如何实现希尔排序,包括其核心的缩小增量排序过程。

又称缩小增量排序

    function shellSort(array) {
          var j, i, v, h=1, s=3, k,n = array.length
          while(h < n)
            h=s*h+1;
        
          while(h > 1) {
            h=(h-1)/s;
            for (k=0; k<h; k++)
              for (i=k+h,j=i; i<n; i+=h, j=i) {
                v=array[i];
                while(true)
                  if ((j-=h) >= 0 && array[j] > v)
                    array[j+h]=array[j];
                else
                  break;
                array[j+h]=v;
              }
          }
        }
<!doctype html> <html dir="ltr" lang="zh-CN"> <head> <meta charset="utf-8"/> <title>希尔排序 by 司徒正美</title> <script type="text/javascript" charset="utf-8"> window.onload = function(){ var assert ,item,test = function(str){ if(!assert){ assert = document.createElement("ol"); assert.i = 0; item = document.createElement("li"); document.body.insertBefore(assert,null); } var li = item.cloneNode(false); assert.appendChild(li); li.innerHTML = str; assert.i++; li.style.backgroundColor = assert.i%2 === 1? "#e6e6e6" : "#D0E4FC"; }; function shellSort(array) { var j, i, v, h=1, s=3, k,n = array.length while(h < n) h=s*h+1; while(h > 1) { h=(h-1)/s; for (k=0; k<h; k++) for (i=k+h,j=i; i<n; i+=h, j=i) { v=array[i]; while(true) if ((j-=h) >= 0 && array[j] > v) array[j+h]=array[j]; else break; array[j+h]=v; } } } var randArray = []; for(i=0; i<100; i++) randArray[i]=Math.floor((Math.random())*10000); document.write('希尔排序
'); test('
未排序之前 '+randArray.join(" ")); shellSort(randArray); test('
排序之后 '+randArray.join(" ")); //http://www.irt.org/script/341.htm } </script> </head> <body> </body> </html>

运行代码

排序过程如【动画模拟演示】。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值