首页 > 代码库 > PHP 插入排序 -- 希尔排序
PHP 插入排序 -- 希尔排序
1.希尔排序 -- Shell Insertion Sort
时间复杂度:数学家正在勤劳的探索!
适用条件: 直接插入排序的改进,主要针对移动次数的减少,这取决于"增量队列"的取值。适用的情况凭个人感觉用吧,我也不知道,反正,我并不认为自己是一个程序员,喜欢凭感觉行事。
1 <?php 2 $arr = [3,4,5,1,11,9,27,27,18,20]; 3 4 5 function shellSort(array &$arr,$dt) 6 { 7 // 跟增量相关,直接排序的改进版,当倒序时,可以极大减少移动的次数。 8 $straightInsertFunc = function(array &$arr,$dt){ 9 $guild = 0; // 监视哨 10 array_unshift($arr,$guild); 11 $arr = array_values($arr); 12 $len = count($arr); 13 14 for($i = 1 + $dt;$i < $len;$i += $dt) 15 { 16 if($arr[$i - $dt] > $arr[$i]) 17 { 18 $arr[0] = $arr[$i]; 19 $arr[$i] = $arr[$i - $dt]; 20 for($j = $i - 2 * $dt;$j > 0 && $arr[$j] > $arr[0];$j-=$dt) 21 { 22 $arr[$j + $dt] = $arr[$j]; 23 } 24 $arr[$j + $dt] = $arr[0]; 25 } 26 } 27 array_shift($arr); 28 }; 29 30 if($dt <= 0) 31 { 32 throw new Exception(‘Param $dt error!‘); 33 } 34 35 for($i = $dt; $i >= 1; --$i) 36 { 37 $straightInsertFunc($arr,$dt); 38 } 39 } 40 41 shellSort($arr,3); 42 43 echo implode(‘,‘,$arr);
运行结果:
PHP 插入排序 -- 希尔排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。