php面试题(三)算法

冒泡算法排序
基本思想:
对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换。这样比较小(大)的数值就将逐渐从后面向前面移动。

public function bubbleSort()
{
    
    
     $arr = [-1, 3, 44, 38, 5, 47, 15, 36];
     for($i = 0; $i < count($arr) - 1; $i++)
     {
    
    
            for($j = 0; $j < count($arr) - 1 - $i; $j++)
            {
    
    
                if($arr[$j] > $arr[$j + 1])
                {
    
    
                    //交换位置
                    $temp = $arr[$j];
                    $arr[$j] = $arr[$j + 1];
                    $arr[$j + 1] = $temp;
                }
           
            }
     }
}

快速排序
基本思想:
在数组中挑出一个元素(一般为第一个)作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,将小的数组和大的数组通过递归再次排序,当数组变成最小数组,所有数组再次合并组成新的数组。

public function quickSort($arr) 
{
    
    
    $length = count($arr);
    if($length <= 1) {
    
    
      return $arr;
    }
    $first_num = $arr[0];//选择一个标尺 选择第一个元素
    $left_array = array();//小于标尺的
    $right_array = array();//大于标尺的
    for($i=1; $i<$length; $i++) 
    {
    
         
        if($first_num > $arr[$i]) {
    
    
          $left_array[] = $arr[$i];
        } else {
    
    
          $right_array[] = $arr[$i];
        }
    }
    $left_array = quickSort($left_array);
    $right_array = quickSort($right_array);
    return array_merge($left_array, array($first_num), $right_array);
}

二分查找(必须是有序的)
基本思想:
假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。(数据量大的时候使用)


public function binSearch($arr,$low,$high,$k)
{
    
    
    if($low <= $high) {
    
    
      $mid = intval(($low + $high)/2);
      if($arr[$mid] == $k){
    
    
        return $mid;
      } else if ($k < $arr[$mid]) {
    
    
        return binSearch($arr,$low,$mid-1,$k);
      }else {
    
    
        return binSearch($arr,$mid+1,$high,$k);
      }
    }
    return -1;
}

遍历文件夹

 public function eachDir($dir)
{
    
    
    $files = [];
    if($handle = opendir($dir))
    {
    
    
      while (($file = readdir($handle)) !== false) 
      {
    
    
        if($file != '..' && $file != '.') {
    
    
          if(is_dir($dir."/".$file)) {
    
    
            $files[$file] = eachDir($dir."/".$file);
          } else {
    
    
            $files[] = $file;
          }
        }
      }
      closedir($handle);
    }
    return $files;
}

获取url扩展名

public function getExt($url)
{
    
    
    $arr  = parse_url($url);
    $file = basename($arr['path']);
    $ext  = explode('.', $file);
    return $ext[count($ext)-1];
}

猜你喜欢

转载自blog.csdn.net/weixin_40172337/article/details/114106076
今日推荐