PHP希尔排序

希尔排序是插入排序的一种改进 , 它在插入排序的基础上采用了分治法 , 将插入排序的待排数据按一定间隔分成若干个组 , 分别对每个做插入排序 , 然后再对所有数据做一次总的插入排序 , 这样可以有效减少交换次数 .


代码 :

function shellSort($a) {
  $l = count($a);
  $d = floor($l/2);
  while($d>=1) {
    for($i=$d; $i<$l; $i++) {
      $t = $a[$i];
      $j = $i-$d;// 获取组内上一个数据 , 然后不断往前与当前数据比较
      while($j>=0 && $a[$j]>$t){
        $a[$j+$d] = $a[$j];
        $j -= $d;
      }
      $a[$j+$d] = $t;
    }
    $d = floor($d/2);
  }
  return $a;
}


用法 :

echo(implode(",", shellSort($a)));


如果有更好的算法 , 欢迎回复哈

你可能感兴趣的:(数据结构,PHP,算法,希尔排序)