标签:shel 针对 相关 插入排序 直接插入 unshift span src uil
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);
运行结果:
标签:shel 针对 相关 插入排序 直接插入 unshift span src uil
原文地址:http://www.cnblogs.com/jingjingdidunhe/p/6487109.html