首页 > 代码库 > 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 插入排序 -- 希尔排序