插入排序(Insertion Sort)是一种简单直观的排序算法,适用于少量数据的排序。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。以下是一个用PHP实现插入排序的示例代码:
<?php
function insertionSort(&$array) {
$length = count($array);
for ($i = 1; $i < $length; $i++) {
$key = $array[$i];
$j = $i - 1;
// 将array[0..i-1]中大于key的元素向后移动一位
while ($j >= 0 && $array[$j] > $key) {
$array[$j + 1] = $array[$j];
$j = $j - 1;
}
$array[$j + 1] = $key;
}
}
// 测试插入排序
$array = [12, 11, 13, 5, 6];
echo "未排序数组: \n";
print_r($array);
insertionSort($array);
echo "已排序数组: \n";
print_r($array);
?>
代码解释:
- 函数定义:
function insertionSort(&$array)
:定义一个名为insertionSort
的函数,参数$array
通过引用传递,这样可以直接修改原数组。
- 获取数组长度:
$length = count($array)
:获取数组的长度。
- 外层循环:
for ($i = 1; $i < $length; $i++)
:从数组的第二个元素开始遍历,因为第一个元素默认是已排序的。
- 保存当前元素:
$key = $array[$i]
:将当前元素保存到变量$key
中。$j = $i - 1
:初始化索引$j
为当前元素的前一个索引。
- 内层循环:
while ($j >= 0 && $array[$j] > $key)
:在内层循环中,如果$j
索引的元素大于$key
,则将$j
索引的元素向后移动一位。$array[$j + 1] = $array[$j]
:将$j
索引的元素赋值给$j+1
索引的位置。$j = $j - 1
:递减$j
索引。
- 插入当前元素:
$array[$j + 1] = $key
:找到适当的位置后,将$key
插入到该位置。
- 测试:
- 定义一个数组
$array
并输出未排序的数组。 - 调用
insertionSort($array)
函数进行排序。 - 输出已排序的数组。
- 定义一个数组
运行结果:
未排序数组:
Array
(
[0] => 12
[1] => 11
[2] => 13
[3] => 5
[4] => 6
)
已排序数组:
Array
(
[0] => 5
[1] => 6
[2] => 11
[3] => 12
[4] => 13
)
这样,通过插入排序算法,数组就被成功排序了。插入排序的时间复杂度为O(n^2),在数据量较小或基本有序的情况下表现较好。