希尔排序:基于插入排序基础上分治后的排序方法,将数组按照一定间隔分成若干组,分别进行插入排序,最后组合成一个总的分组,再进行一次插入排序,优点在于减少交换次数(不是每次都循环整个数组)。
$arr = array(3,9,4,1,7,10,12,321,8,5,2,6);/*** [shellsort 希尔排序]* @param [type] $array [待排序数组]* @return [type] array [排序完成后数组]* 关键变量$m(组数,步长),$key(每组元素数量)*/function shellsort($array){//初始获取数组长度$len,初始化$m,下面第次除2分组$len = $m = count($array);//最外层循环,每次对数组进行分组,直至只剩一个数组while($m>=2){//获取当前组数$m = floor($m/2);//获取当前组内元素个数$key = floor($len/$m);//循环对每组元素进行插入排序for($i=0;$i<$m;$i++){//对$i 组进行插入排序,$key个元素,关键点步长$m,插入排序不是按1,递加,而是按照步长$m递加for($j=1;$j<$key;$j++){$temp = $array[$i+$m*$j];for($k=$j;$k>0;$k--){if($temp>$array[$i+$m*($k-1)]){$array[$i+$m*$k] = $array[$i+$m*($k-1)];}else{break;}}$array[$i+$m*($k)] = $temp;}}}return $array;}print_r(shellsort($arr));
希尔排序详解
本文介绍了一种改进的插入排序算法——希尔排序。通过将数组按一定间隔分组并分别进行插入排序,逐步缩小间隔直至为1,完成最终排序。这种方法减少了元素间的交换次数,提高了排序效率。

被折叠的 条评论
为什么被折叠?



