使用js实现希尔排序

希尔排序(Shell Sort)是插入排序的一种更高效的改进版本,也称为缩小增量排序。它的基本思想是:先将整个待排序的记录序列分割成为若干子序列(由相隔某个“增量”的记录组成)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的记录"基本有序"时,再对全体记录进行一次直接插入排序。

以下是一个使用 JavaScript 实现的希尔排序示例:

function shellSort(arr) {
    var len = arr.length,
        temp,
        gap = 1;

    // 动态定义间隔序列
    while(gap < len/3) {
        gap = gap*3+1;
    }

    for (gap; gap > 0; gap = Math.floor(gap/3)) {
        for (var i = gap; i < len; i++) {
            temp = arr[i];
            var j = i - gap;
            while (j >= 0 && arr[j] > temp) {
                arr[j+gap] = arr[j];
                j -= gap;
            }
            arr[j+gap] = temp;
        }
    }

    return arr;
}

// 测试用例
var arr = [4,7,2,9,1,5,8,3,6,0];
console.log("原始数组:", arr);
console.log("希尔排序结果:", shellSort(arr));

在这个示例中,我们首先计算出一个初始的间隔值 gap,然后在每次迭代中,我们都使用这个间隔值对数组进行分组,并对每组进行插入排序。在每次迭代结束后,我们都会减小间隔值,直到间隔值变为 1,此时整个数组都会被视为一个组,进行最后一次插入排序。

posted @   王铁柱6  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示