宝哥软件园

JavaScript排序算法中希尔排序的两个例子

编辑:宝哥软件园 来源:互联网 时间:2021-11-09

插入排序在对几乎已排序的数据进行操作时效率较高,即可以达到线性排序的效率。但是,插入排序通常效率不高,因为它一次只能移动一位数据。希尔排序是以它的设计者唐纳德谢尔的名字命名的,该算法发表于1959年。一些旧的教科书和参考手册将算法命名为Shell-Metzner,其中包含了Marlene Metzner Norton的名字,但根据Metzner自己的说法,“我没有为这个算法做任何事情,我的名字不应该出现在算法的名字中。”

Hill排序的基本思想:首先取一个小于n的整数d1作为第一个增量,将文件的所有记录分成d1组。距离为d1倍数的所有记录都放在同一组中。首先,在每个组中直接插入和排序。然后取第二个增量d2 d1,重复上述分组排序,直到增量dt=1(dt-l…D2 D1),即所有记录放在同一个组中直接插入排序。该方法本质上是一种数据包插入方法。示例:Copy代码如下:/*** Hill排序,也称为降序增量排序算法,是插入排序的一个更高效的改进版本。希尔排序是一种不稳定的排序算法。* * hill排序是基于insert排序的以下两个性质:* insert排序在对几乎已排序的数据进行操作时效率较高,即可以达到线性排序的效率*但insert排序一般效率较低,因为insert排序一次只能移动一位数据* */function shell sort(list){ var gap=math . floor(list . length/2);while(gap 0){ for(I=gap;一、清单.长度;I){ temp=list[I];for(j=I;j=间隙列表[j -间隙]温度;j-=gap){ list[j]=list[j-gap];} list[j]=temp;} gap=Math . floor(gap/2);}返回列表;};//testvar arr=[2,1,3,12,5,66,23,87,15,32];shellSort(arr);示例2: shell copy代码如下: script type=' text/JavaScript '/document . write('-//document . write(' br/br/')//var Array=new Array(12,25,32,16,18,27,59,69,36);函数shellSort(array) {var j,I,v,h=1,s=3,k,n=array.lengthvar结果=' ';var计数=0;而(h n)h=s * h 1;而(h1){ h=(h-1)/s;for(k=0;KH;k)为(i=k h,j=I;在;i=h,j=I){ v=array[I];while(true)if((j-=h)=0 array[j]v)array[j h]=array[j];elsebreak数组[j h]=v;}计数;结果=' br/计数'排序的结果是:for(var n=0;数组长度;n ) { result=array[n]',';} }返回结果;}//shallSort(数组);//document . write(' br/br/');/script

更多资讯
游戏推荐
更多+