PHP希尔(Shell)排序算法的实现(代码详解)
Posted php中文网最新课程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP希尔(Shell)排序算法的实现(代码详解)相关的知识,希望对你有一定的参考价值。
源 / php中文网 源 / www.php.cn
希尔(Shell)排序或Shell的方法,是一种就地比较排序。它可以被看作是冒泡排序或插入排序的推广。该方法首先对彼此相距很远的元素对进行排序,然后逐步缩小要比较的元素之间的差距。从相距很远的元素开始,可以比近邻交换更快地移动一些位置不合适的元素。
(查看原文请点击本文末尾左下角:阅读原文)
Shell排序示例如下:
第一次遍历是“5排序”,对不同的子数组(a1, a6, a11)、(a2, a7, a12)、(a3, a8)、(a4, a9)、(a5, a10)执行插入排序。例如,它将子数组(a1, a6, a11)从(62,17,25)更改为(17,25,62)。
然后是“3排序”,对子数组(a1、a4、a7、a10)、(a2、a5、a8、a11)、(a3、a6、a9、a12)执行插入排序。
最后一次是“1排序”,它是整个数组(a1,…,a12)。如示例所示,Shell sort操作的子数组最初很短;后来它们变长了,但基本都是有序的。在这两种情况下,插入排序都是有效的。
希尔(Shell)排序是不稳定的:它可能会改变具有相等值的元素的相对顺序。它是一种自适应排序算法,在输入部分排序时执行得会更快。
希尔(Shell)排序图形示意如下:
<?php
function
shell_Sort(
$my_array
)
{
$x
=
round
(
count
(
$my_array
)/2);
while
(
$x
> 0)
{
for
(
$i
=
$x
;
$i
<
count
(
$my_array
);
$i
++){
$temp
=
$my_array
[
$i
];
$j
=
$i
;
while
(
$j
>=
$x
&&
$my_array
[
$j
-
$x
] >
$temp
)
{
$my_array
[
$j
] =
$my_array
[
$j
-
$x
];
$j
-=
$x
;
}
$my_array
[
$j
] =
$temp
;
}
$x
=
round
(
$x
/2.2);
}
return
$my_array
;
}
$test_array
=
array
(3, 0, 2, 5, -1, 4, 1);
echo
"原始数组 :
"
;
echo
implode(
', '
,
$test_array
);
echo
"
排序后数组
:"
;
echo
implode(
', '
,shell_Sort(
$test_array
)). PHP_EOL;
输出:
原始数组 : 3, 0, 2, 5, -1, 4, 1
排序后数组 :-1, 0, 1, 2, 3, 4, 5
-END-
声明:本文选自「 php中文网 」,搜索「 phpcnnew 」即可关注!
▼请点击下方:“阅读原文”,在线查看全部文章内容!
以上是关于PHP希尔(Shell)排序算法的实现(代码详解)的主要内容,如果未能解决你的问题,请参考以下文章