• 常用php算法


       一、冒泡排序
    function bubble($array)
    {
      $cnt = count($array);
      if($cnt <= 0) return $array;
      for($i =1;$i < $cnt;$i++)
      {
        for($j = 0;$j < $cnt-$i;$j ++)
        {
          if($array[$j] > $array[$j+1])
          {
            $tmp = $array[$j];
            $array[$j] = $array[$j+1];
            $array[$j+1] = $tmp;
          }

        }
      }
    return $array;
    }

       二、快速排序

    function quick_sort($a)

    {

        // 判断是否需要运行,因下面已拿出一个中间值,这里<=1
        if (count($a) <= 1) {
            return $a;
        }
        $middle = $a[0]; // 中间值
        $left = array(); // 接收小于中间值
        $right = array();// 接收大于中间值
    
        // 循环比较
        for ($i=1; $i < count($a); $i++) { 
            if ($middle < $a[$i]) {
                // 大于中间值
                $right[] = $a[$i];
            } else {
                // 小于中间值
                $left[] = $a[$i];
            }
        }
    
        // 递归排序划分好的2边
        $left = quick_sort($left);
        $right = quick_sort($right);
    
        // 合并排序后的数据,别忘了合并中间值
        return array_merge($left, array($middle), $right);
    }


    三、选择排序
    /** 2层循环
    * 第一层逐个获取数组的值 $array[$i]
    * 第二次遍历整个数组与$array[$i]比较($j=$i+1已经比较的,不再比较,减少比较次数)
    * 如果比$array[$i]小,就交换位置
    * 这样一轮下来就可以得到数组中最小值
    * 以此内推整个外层循环下来就数组从小到大排序了
    * @param array $array 要比较的数组
    * @return array $array 从小到大排序后的数组
    */

    function selectSort($array){
      $cnt = count($array);
      for($i=0;$i<$cnt;$i++){
        for($j=($i+1);$j<$cnt;$j++){
          if($array[$i]>$array[$j]){
            $tmp = $array[$i];
            $array[$i] = $array[$j];
            $array[$j] = $tmp;
          }
        }
    }



    四、二分查找传入数组必须是从小到大已排序好的数组)只适用于有序表,且限于顺序存储结构

     function binarySearch($arr,$val,$st,$et){   
        $m_ind floor(($st + $et) / 2);
        $max_idx count($arr)-1;
        $min_idx = 0;
             
        if($arr[$min_idx]>$val || $arr[$max_idx]<$val || ($et-$st==1 && $arr[$et]!=$val && $arr[$st]!=$val)){
                return -1;
        }
             
        if($arr[$m_ind]==$val){
            return $m_ind;
        else if($arr[$m_ind] > $val){
            $et $m_ind - 1;
            return binarySearch($arr$val$st$et);
        else {
            $st $m_ind + 1;
            return binarySearch($arr$val$st$et);
        }
    }
     
     五、顺序查找(对表中的元素排序无要求)
       function query_search($array,$val)
    {
    foreach ($array as $k => $v)
    {
    if($v == $val)
    {
    return $k ;
    }
    }

    return -1 ;
    }
    六、二维数组排序,能够具有通用性,可以调用php内置函数
    <?php
    $data = array(
      array(
        'id' => 5698,
        'first_name' => 'Bill',
        'last_name' => 'Gates',
      ),
      array(
        'id' => 4767,
        'first_name' => 'Steve',
        'last_name' => 'Aobs',
      ),
      array(
        'id' => 3809,
        'first_name' => 'Mark',
        'last_name' => 'Zuckerberg',
      )
    );
    

    //$arr要进行排序的二维数组;$key是排序的健值,$order是排序规则,1是升序,0是降序

    function array_sort($arr,$key,$order)
    {
      $columns = array_column($arr,$key);
      $o =  $order == 1 ? SORT_ASC:SORT_DESC;
      array_multisort($columns,$o,$arr);
      return $arr;
    }
    var_dump(array_sort($data,"id",1));

     

    了解下以下两个函数:

    1.array_column() 返回输入数组中某个单一列的值。

    2.array_multisort() 函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多

    个值相同,它将对下一个数组进行排序。

  • 相关阅读:
    vue-cli 3.x 配置多环境
    阿里云安装nodejs
    使用vuex实现父组件调用子组件方法
    关于图片预览使用base64在chrome上的性能问题解决方法
    手机开发遇到的若干坑(持续更新)
    java--03--cglib代理
    java--02--动态代理
    java--01--静态代理
    SocketIO---Netty--HelloWorld
    SocketIO---bio2---带线程池处理任务
  • 原文地址:https://www.cnblogs.com/ivy-zheng/p/10925451.html
Copyright © 2020-2023  润新知