希爾排序算法是針對直接插入排序算法的改進。其算法描述爲:從一個長度爲N的無序數組中取一個小與N的整數d1作爲第一次的增量,然後將數組按每相隔d1個元素進行全部記錄分組(並不是真實分組)。分完組後現在各組中進行直接插入排序,接着,取出第二個增量麼d2<d1重複之前的分組和排序,直至所取的最後一個增量0=<..<d2<d1。直到最後所有記錄放到一組中進行直接插入排序爲止(注意:這裏的d1是指相隔d1個元素取出一個組成數組而不是將整個數組分成d1個組)。
其PHP語言描述如下:
<?php
function shell_sort($array){
$count=count($array);
for($h=$count/2;$h>0;$h=$h/2){
for($i=$h;$i<$count;$i++){
$temp=$array[$i];
for($j=$i-$h;$j>=0 && $temp<$array[$j];$j-=$h){
$array[$j+$h]=$array[$j];
}
$array[$j+$h]=$temp;
}
}
return $array;
}
$arr=array(44,14,55,32,876,32,65,11);
$res=shell_sort($arr);
foreach($res as $key => $value){
echo "key:".($key+1)." value:".$value."<br/>";
}
?>