加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP排序算法之希尔排序(Shell Sort)实例说明

发布时间:2021-05-23 01:52:05 所属栏目:编程 来源:网络整理
导读:本篇章节讲授PHP排序算法之希尔排序(Shell Sort)。供各人参考研究详细如下: 根基头脑: 希尔排序是指记录按下标的必然增量分组,对每一组行使 ,跟着增量逐渐镌汰,每组包括的要害字越来越多,当增量镌汰至 1 时,整个序列刚好被分成一组,算法便

本篇章节讲授PHP排序算法之希尔排序(Shell Sort)。分享给各人供各人参考,详细如下:

根基头脑:

希尔排序是指记录按下标的必然增量分组,对每一组行使 ,跟着增量逐渐镌汰,每组包括的要害字越来越多,当增量镌汰至 1 时,整个序列刚好被分成一组,算法便终止。

操纵步调:

先取一个小于 n(序列记录个数) 的整数 d1 作为第一个增量,把文件的所有记录分组。全部间隔为 d1 的倍数的记录放在统一个组中。先在各组内举办 ;然后,取第二个增量 d2 < d1 一再上述的分组和排序,直至所取的增量 dt=1( dt < d(t-1) …< d2 < d1),即全部记录放在统一组中举办 为止.

该要领实质上是一种分组插入要领

较量相隔较远间隔(称为增量)的数,使得数移动时能跨过多个元素,则举办一次比[2] 较就也许消除多个元素互换。D.L.shell于1959年在以他名字定名的排序算法中实现了这一头脑。算法先将要排序的一组数按某个增量d分成多少组,每组中记录的下标相差d.对每组中所有元素举办排序,然后再用一个较小的增量对它举办,在每组中再举办排序。当增量减到1时,整个要排序的数被分成一组,排序完成。

一样平常的首次取序列的一半为增量,往后每次减半,直到增量为1。

关于增量的取法,听说迄今为止还没有找到一种最好的增量序列,不外有一个凶猛的要求是 最后一个增量值必需便是 1 才行。

给定实例的shell排序的排序进程

假设待排序文件有10个记录,其要害字别离是:

49,38,65,97,76,13,27,49,55,04。

增量序列的取值依次为:

5,3,1

PHP排序算法之希尔排序(Shell Sort)实例说明

算法实现:

= 0 && $arr[$j + $inc] < $arr[$j]; $j -= $inc) { $arr[$j + $inc] = $arr[$j]; //记录后移 } //插入 $arr[$j + $inc] = $temp; } //增量为1时遏制轮回 } while ($inc > 1); } //$arr = array(9,1,5,8,3,7,4,6,2); $arr = array(49,38,65,97,76,13,27,49,55,04); ShellSort($arr); var_dump($arr);

运行功效:

int(4) [1]=> int(13) [2]=> int(27) [3]=> int(38) [4]=> int(49) [5]=> int(49) [6]=> int(55) [7]=> int(65) [8]=> int(76) [9]=> int(97) }

伟大度说明:

通过以上代码的说明,信托各人已经有些大白,希尔排序的要害并不是任意分组后各自排序,而是将相隔某个“增量”的记录构成一个子序列,实现跳跃式的移动,使得排序的服从进步。

最坏的环境下时刻伟大度是

希尔排序是不不变排序。

本文参考自《》,在此仅作记录,利便往后查阅,大神勿喷!

PS:这里再为各人保举一款关于排序的演示器材供各人参考:

在线动画演示插入/选择/冒泡/合并/希尔/快速排序算法进程器材:

更多关于PHP相干内容感乐趣的读者可查察本站专题:《》、《》、《》、《》、《》、《》及《》

但愿本文所述对各人PHP措施计划有所辅佐。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读