JS排序算法总结:(四)希尔排序

目的:掌握 希尔排序 的 基本思想与过程、代码实现、时间复杂度

1、基本思想与过程:

  (1)按照某一增量,将数组分为若干子序列,对子序列分别进行插入排序。

  (2)逐渐减小增量,并重复此过程,直到增量为1,此时序列基本有序,最后进行插入排序。

2、代码实现:

function shell_sort(arr){

       var temp = 0;
    var len = arr && arr.length;
       var incre = len;

       while(true){
           incre = incre/2;

           for(var k = 0;k<incre;k++){    //根据增量分为若干子序列
            var count = 0;
               for(var i=k+incre;i<len;i+=incre){
                count++;
                   for(var j=i;j>k;j-=incre){
                       if(array[j]<array[j-incre]){
                           temp = array[j-incre];
                           array[j-incre] = array[j];
                           array[j] = temp;
                       }else{
                           break;
                       }
                   }
                
               }
            console.log('根据增量'+incre+',将数组分为'+count)
           }

           if(incre <= 1){
               break;
           }
       }
    return arr
}

 

3、时间复杂度:O(n1.5)

posted @ 2018-08-28 11:01  Cassie_茜  阅读(317)  评论(0编辑  收藏  举报