PHP 插入排序 -- 折半查找

1. 折半查找  -- Binary Insertion Sort

时间复杂度 : O(n^2)

适用条件 : 相对直接插入排序,减少了数值的比较次数。适用于需要排序的数码比较少的情况。

 1 <?php
 2 namespace Test;
 3 
 4 $a = [0 =>3,4,5,1,11,9,27,27,18,20];
 5 
 6 function binaryInsertSort(array &$arr)
 7 {
 8     $guild = 0;  // 监视哨
 9     $arr = array_values($arr);
10     array_unshift($arr,$guild);
11     $len = count($arr);
12 
13     for($i = 2;$i < $len;$i++)
14     {
15         $arr[0] = $arr[$i];
16         $low = 1;
17         $high = $i - 1;
18 
19         while($low <= $high)
20         {
21             $mid = ($high + $low)/2;
22             if($arr[$mid] > $arr[0])
23             {
24                 $high = $mid - 1;
25             }
26             else
27             {
28                 $low = $mid + 1;
29             }
30         }
31 
32         for($j = $i;$j >= $high + 1; --$j)
33         {
34             $arr[$j] = $arr[$j - 1];
35         }
36 
37         $arr[$high + 1] = $arr[0];
38     }
39     array_shift($arr);
40 }
41 
42 binaryInsertSort($a);
43 echo implode(',',$a);

 

输出:

 

posted @ 2017-02-28 23:46  GoodByeZ  阅读(463)  评论(0编辑  收藏  举报