这篇文章主要介绍“Java、PHP、Python怎么实现希尔排序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java、PHP、Python怎么实现希尔排序”文章能帮助大家解决问题。

希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;
但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;

希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录”基本有序”时,再对全体记录进行依次直接插入排序。

算法步骤

选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;

按增量序列个数 k,对序列进行 k 趟排序;

每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

动图演示

代码实现

JavaScript

实例

functionshellSort(arr){varlen=arr.length,temp,gap=1;while(gapfor(gap;gap>0;gap=Math.floor(gap/3)){for(vari=gap;ifor(varj=i-gap;j>=0&&arr[j]>temp;j-=gap){arr[j+gap]=arr[j];}arr[j+gap]=temp;}}returnarr;}

Python

实例

defshellSort(arr):importmathgap=1while(gapwhilegap>0:foriinrange(gap,len(arr)):temp=arr[i]j=i-gapwhilej>=0andarr[j]>temp:arr[j+gap]=arr[j]j-=gaparr[j+gap]=tempgap=math.floor(gap/3)returnarr

Go

实例

funcshellSort(arr[]int)[]int{length:=len(arr)gap:=1forgapforgap>0{fori:=gap;iforj>=0&&arr[j]>temp{arr[j+gap]=arr[j]j-=gap}arr[j+gap]=temp}gap=gap/3}returnarr}

Java

实例

publicstaticvoidshellSort(int[]arr){intlength=arr.length;inttemp;for(intstep=length/2;step>=1;step/=2){for(inti=step;iwhile(j>=0&&arr[j]>temp){arr[j+step]=arr[j];j-=step;}arr[j+step]=temp;}}}

PHP

实例

functionshellSort($arr){$len=count($arr);$temp=0;$gap=1;while($gap$len/3){$gap=$gap*3+1;}for($gap;$gap>0;$gap=floor($gap/3)){for($i=$gap;$i$len;$i++){$temp=$arr[$i];for($j=$i-$gap;$j>=0&&$arr[$j]>$temp;$j-=$gap){$arr[$j+$gap]=$arr[$j];}$arr[$j+$gap]=$temp;}}return$arr;}

C

实例

voidshell_sort(intarr[],intlen){intgap,i,j;inttemp;for(gap=len>>1;gap>0;gap>>=1)for(i=gap;ifor(j=i-gap;j>=0&&arr[j]>temp;j-=gap)arr[j+gap]=arr[j];arr[j+gap]=temp;}}

C++

实例

templatevoidshell_sort(Tarray[],intlength){inth=1;while(hwhile(h>=1){for(inti=h;ifor(intj=i;j>=h&&array[j]

关于“Java、PHP、Python怎么实现希尔排序”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。