希尔排序是一种改进的插入排序算法,它通过将数组分组来进行排序,然后逐步缩小分组的间隔,直到间隔为1时完成最后一次排序。希尔排序的核心思想是利用插入排序对数组中相距较远的元素进行比较和交换,在每一轮中减小间隔,最终达到整体有序的效果。
function shellSort($arr) {
$length = count($arr);
$gap = floor($length / 2);
while ($gap > 0) {
for ($i = $gap; $i < $length; $i++) {
$temp = $arr[$i];
$j = $i;
while ($j >= $gap && $arr[$j - $gap] > $temp) {
$arr[$j] = $arr[$j - $gap];
$j = $j - $gap;
}
$arr[$j] = $temp;
}
$gap = floor($gap / 2);
}
return $arr;
}
// 示例用法
$unsortedArray = [5, 3, 1, 2, 4];
$sortedArray = shellSort($unsortedArray);
print_r($sortedArray);