JavaScript Switc希尔排序

算法详解

希尔排序的基本思想:

(1)选择一个希尔增量序列t1,t2,…,tk,(递减序列,tk=1)

(2)按增量序列个数k,对序列进行k 趟排序,

每趟排序,根据对应的增量ti,将待排序列分割成若干子序列,分别对各子序列进行插入排序。

当且仅当增量为1 时,整个序列合成为一组,构成一组有序数字,完成排序。

说明:

(1)希尔增量的起始值不超过整个序列的长度,并且最好选择素数(由经验得出,学者可以尝试一下)。

(2)希尔增量序列是递减的,递减规律自行确定,但一定要保证最后一个希尔增量值为1。

代码:

    <script type="text/javascript">

 



                    var arr = [9, 1, 2, 5, 7, 4, 8, 6, 3, 5]; //初始化数组



                    var half = parseInt(arr.length / 2); //设置增量为原数组长度的一半

                    //控制增量

                    for (var gap = half; gap >= 1; gap = parseInt(gap / 2)) {

                        console.log('--------gap' + gap); //检查增量gap的值

                        //循环整个数组

                        for (var i = gap; i < arr.length; i++) {

                            // console.log(arr[i]);//检验循环遍历的次数

                            //循环每个小组内的数字

                            for (var j = i - gap; j >= 0; j = j - gap) {

                                // console.log(j, j - gap);

                                console.log(j, arr[j], arr[j + gap]); //索引,用来比较的两个值

                                //比较大小,交换位置

                                if (arr[j] > arr[j + gap]) {

                                    var temp = arr[j];

                                    arr[j] = arr[j + gap];

                                    arr[j + gap] = temp;

                                }

                            }

                            console.log('+++++++++++')

                        }

                    }

                    console.log(arr);

    </script>

这是我所学到的,所以我要分享给你们,希望可以帮助到你们。

以上就是我的分享,新手上道,请多多指教大神勿喷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值