首页 » SEO优化 » php希尔排序技巧_带你周全深入理解希尔排序算法

php希尔排序技巧_带你周全深入理解希尔排序算法

访客 2024-11-07 0

扫一扫用手机浏览

文章目录 [+]

下面先先容一下插入排序的性子:

首先,插入排序算法对付已经有序的数据进行操作的时候,效率很高,可以达到线性排序的效率。

php希尔排序技巧_带你周全深入理解希尔排序算法

其次,插入排序进行排序的时候,每一趟排序只能移动一个数据。
以是说这样的排序方法相对来说效率又比较低。

php希尔排序技巧_带你周全深入理解希尔排序算法
(图片来自网络侵删)

基于此性子,希尔排序的设计者发明了希尔排序算法,其基本思想是:

先将全体待排序的记录序列分割成为多少子序列分别进行直接插入排序,分割子序列的方法便是设定一个增量,待当下的每个子序列有序的时候,将增量减一半(除以2,取整),再次进行子序列的排序。
依次进行,待全体序列中的记录基本上有序的时候,再对全体记录进行依次直接插入排序,此时增量减为1,由于直接插入排序在元素基本有序的情形下(根据上述第一点,靠近最好的情形),效率是很高的。

因此,对付希尔排序,总结一句话,便是一种分组插入方法。
由于设定了一个增量,并且依次将增量减1,以是希尔排序又称为递减增量排序算法。

对付希尔排序的算法步骤,可以用下图来表示

希尔排序第一趟排序

希尔排序第二趟排序

希尔排序第三趟排序

在这里须要说一下,希尔排序是稳定排序,我们可以设定一组数据按照上述办法进行排序,可以创造其为稳定排序。

希尔排序在按照增量分组往后,其组内的排序可以利用插入排序,当然也可以利用冒泡排序、选择排序等等

下面奉上希尔排序的PHP实当代码

$arr = array(10,6,20,50,30,7,23,35,40,1,17);/ 首先初始化 增量 数组长度/2 取整 floor() 函数向下取整 对付增量每次循环都由 当前增量/2 /for($dl=floor(count($arr)/2);$dl>=1;$dl=floor($dl/2)){ / 每次从 增量的位置开始,直到数组递增变量达到数组的长度 / for($j=$dl;$j<count($arr);$j++){ for($i=$j-$dl;$i>=0;$i-=$dl){ if($arr[$i+$dl]<$arr[$i]){ $temp = $arr[$i+$dl]; $arr[$i+$dl]=$arr[$i]; $arr[$i]=$temp; } } }}

以上代码只是个中的一种实现办法,其代码实现有很多种,仅仅针对组内的排序办法就有很多,如果大家有什么好的方法,欢迎从下面留言,大家共同谈论,共同提高。

标签:

相关文章

QQ聊天恶搞代码技术背后的趣味与风险

人们的生活越来越离不开社交软件。在我国,QQ作为一款历史悠久、用户众多的社交平台,深受广大网民喜爱。在QQ聊天的过程中,恶搞代码的...

SEO优化 2025-03-02 阅读1 评论0

Python代码截屏技术与应用的完美融合

计算机屏幕截图已经成为人们日常生活中不可或缺的一部分。无论是分享工作成果、记录游戏瞬间,还是保存网页信息,屏幕截图都发挥着重要作用...

SEO优化 2025-03-02 阅读1 评论0

QQ无限刷礼物代码技术突破还是道德沦丧

社交平台逐渐成为人们生活中不可或缺的一部分。QQ作为我国最具影响力的社交软件之一,其丰富的功能吸引了大量用户。近期有关QQ无限刷礼...

SEO优化 2025-03-02 阅读1 评论0