Blogger Information
Blog 82
fans 0
comment 1
visits 107647
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
希尔排序
子龙的博客搬家啦httpswwwcnblogscomZiLongZiLong
Original
1065 people have browsed it

如果了解希尔排序之前,了解一下插入排序那么对理解希尔排序是非常有好处的,希尔排序的要点是在排序的时候对所排序列分组,在比较两个元素大小的时候,比较的是两个距离为组距的两个位置的元素,整个过程中组距会递减,直到最后组距为1时,对整个序列执行一次插入排序。

希尔排序之所以快的原因是:一次希尔排序可以消灭更多个逆序对(相比冒泡排序),而在基本有序之后,也就是组距为1的时候,希尔排序实际上执行的是插入排序,而插入排序在序列基本有序的情况下是性能很出色的算法。

function shell(arr){
    let len = arr.length, gap = Math.floor(len/2), 
        i, j, tmp;
    while(gap > 0){
        for(i = gap; i < len; i++){
            tmp = arr[i];            
            for( j = i - gap;j >= 0 && tmp < arr[j]; j = j - gap){
                arr[j+gap] = arr[j];              
            }
            arr[j + gap] = tmp;
        }
        gap = Math.floor(gap/2);
    }
    return arr;
}

事实上关于希尔排序的gap,也就是间隔的取法有很多种研究,而且希尔排序的时间复杂度分析也是一个比较高深的数学问题,在此我就不打算去深入了解了。

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post