算法--希尔排序可视化


算法--希尔排序可视化

一直都想做各种数据可视化

现用工具 echarts 做排序过程可视化


希尔排序

算法性能取决于 h

function shellSort(array) {
    const N = array.length;
    let h = 1;
    while (h < N / 3) h = 3 * h + 1;
    while (h >= 1) {
        for (let i = h; i < N; i++) {
            for (let j = i; j >= h && array[j] < array[j - h]; j -= h) {
                let tem = array[j];
                array[j] = array[j - h];
                array[j - h] = tem;
                process.push(arr.slice(0));
            }
        }
        h = Math.floor(h / 3);
    }
}
shellSort(arr);

其中 process 是用来存储过程的数组,每次变化的数组结果都存在该数组中,每次存入结果如下

image-20211116232236587

希尔排序,将固定间隔的数形成多个数组,每个数组进行排序,间隔量从指定值缩小到 1 ,最后将多个数组合并成一个


Echarts

三部曲,设置 DOM 元素---初始化 Echarts---设置 Option

通过不断改变 option 中的数据来不断更新图表,最终形成动画

animationDuration: 0,

animationDurationUpdate: 1000,

animationEasing: "linear",

animationEasingUpdate: "linear",
    
// 在 option 中设置转换动画

希尔排序


播放动画

这里使用了 setInterval 函数来播放动画,将过程数组的长度作为标识符,如果长度大于零,那么取出来设置到 option 中,最终形成动画


完整代码如下



  
    
    
    
    Document