JavaScript插入排序和希尔排序

1、直接插入排序
基本操作是将一个记录插入到已经排好序的表中,从而得到一个行的记录数增1的有序表。
思路:列表已经放入一个数,第二个数与其比较,如果比他大就放在后面,如果比他小就将原来的数往后移动一个单位,将第二个数放在这个位置。后面继续添加数,与列表中已经排好序的数,进行比较。

function sort(arr){
    //从第二个数开始,分别于前面的数比较
    for(var i=1; i<arr.length; i++){
        for(var j=0; j<i; j++){
            if(arr[i]<arr[j]){
                var temp=arr[i];
                for(var k=i; k>j; k--){
                    arr[k]=arr[k-1];
                }
                arr[k]=temp;
            }
        }
    }
    return arr;
}

2.希尔排序
原理:对于数比较多的排序,之前的插入排序只有在基本有序和数较少的时候的效率才会很高。而希尔排序不需要,希尔排序分割排序记录减少待排序记录的个数。将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后的到的结果是基本有序而不是局部有序。

function sort(arr){
    var increment = arr.length;
    do{
        increment=parseInt(increment/3+1);
        for(var i=increment; i<arr.length; i++){
            for(var j=i-increment; j<i; j+=increment){
                if(arr[i]<arr[j]){
                    var temp=arr[i];
                    for(var k=i; k>j; k-=increment){
                        arr[k]=arr[k-increment];
                    }
                    arr[k]=temp;
                }
            }
        }
    }
    while(increment > 1);
    return arr;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值