此排序是插入排序的加强版,将一个数组做到h有序,然后将h
逐渐减少至1。
class Test
{
public function sort(Array $arr)
{
$n = count($arr);
$h = 1;
while($h < intval($n/3))
{
$h = $h*3 + 1;
}
while($h >=1)
{
for($i = $h; $i < $n; $i++)
{
for($j = $i;$j > $h && $arr[$j] < $arr[$j-$h]; $j = $j - $h)
{
$temp = $arr[$j];
$arr[$j] = $arr[$j - $h];
$arr[$j - $h] = $temp;
}
}
$h = intval($h/3);
}
return $arr;
}
}
$test = new Test();
$params = array(1,3,7,5,2);
$result = $test->sort($params);
print_r($result);
适用场景 大型数据 数据越大优势越大