php之插入排序

来源:互联网 发布:四海认证淘宝渔具特价 编辑:程序博客网 时间:2024/06/15 11:07

这里写图片描述

1.直接插入排序代码实现:

<?phpheader("content-type:text/html;charset=utf-8");//直接插入排序实现从小到大排序//思路:每一趟排序将待排序的记录(元素)插入到前面的有序数列中,从左到右不断增大有序数列//关键:找到前面的有序数列中正确插入位置。$arr  =array(6,18,2,4,16,8);echo "<br>排序前:<br>";print_r($arr);insertSort($arr);echo "<br>排序后:<br>";print_r($arr);function insertSort(&$arr){  $len = count($arr);  //从第二个记录起,跟前面的有序数列比较寻找插入位置  for($i = 1;$i < $len; $i++)  {    $insertData = $arr[$i];//要插入的记录    $pos = $i;//插入位置        for($j = $i - 1;$j >= 0;$j--)        {          if($arr[$j] > $insertData)//如果前面的记录大于要插入的记录          {              $arr[$j+1] = $arr[$j];//前面的记录往后移一个下标              $pos--;          }          else          {            break;          }        }     $arr[$pos] = $insertData;//插入到正确位置     echo "<br>第{$i}趟排序结果:";     print_r($arr);  }}

2.二分查找插入排序代码实现

<?phpheader("content-type:text/html;charset=utf-8");//二分查找插入排序:跟直接插入排序思路差不多,不同在通过二分查找来确定插入位置$arr  =array(6,18,2,4,16,8);echo "<br>排序前:<br>";print_r($arr);bsInsertSort($arr);echo "<br>排序后:<br>";print_r($arr);function bsInsertSort(&$arr){  $len = count($arr);  for($i = 1;$i < $len; $i++)  {     $left = 0;     $right = $i -1;     $mid = 0;     $insertData = $arr[$i];//要插入的记录     while($left<=$right)     {       $mid = ($left + $right)/2;       if($insertData > $arr[$mid])       {         $left = $mid + 1;       }else       {         $right = $mid -1;       }     }     //$left是要插入的位置     for($j=$i-1;$j>=$left;$j--)     {       $arr[$j+1]  = $arr[$j];//后移比插入记录大的数     }     $arr[$left] = $insertData;  }}
0 0
原创粉丝点击