• PHP算法


    一,实现快速排序

     1 <?php
     2 function quickSort($arr) {
     3     $len=count($arr) ;
     4         if($len<=1) {
     5             return $arr;
     6         }
     7         $key=$arr[0];
     8         $left_arr=array();
     9         $right_arr=array();
    10         for($i=1;$i<$len;$i++) {
    11             if($arr[$i]<=$key) {
    12                 $left_arr[]=$arr[$i];
    13             }else {
    14                 $right_arr[]=$arr[$i];    
    15             }
    16         }
    17        $left_arr=quickSort($left_arr);
    18        $right_arr=quickSort($right_arr);
    19        return array_merge($left_arr,array($key),$right_arr);
    20 
    21 }
    22 $table=array(45,12,65,23,67,66,22,78,42);
    23 print_r(quickSort($table));

    方法是

    1、建立一个quickSort()的函数,首先设置先设置一个变量为该数组的第一位,

    2、接下来的该数组数值与第一位比较,若大于第一位,则分化到$right_arr这个数组里去,反之,则划分到$left_arr的数组里;

    3、然后$right_arr和$left_arr在不断调用quickSort()这个函数;

    4、使用array_merge()将所有分开的数组合并为一个数组。

    二、冒泡法

     1 <?php
     2 function maopaoSort($array){
     3     $len=count($array);
     4     if($len<=1) {
     5         return $array;
     6     }
     7     for($i=0;$i<$len;$i++) {
     8         for($j=$len-1;$j>$i;$j--) {
     9             if($array[$j]>$array[$j-1]){
    10                 $tmp=$array[$j];
    11                 $array[$j]=$array[$j-1];
    12                 $array[$j-1]=$tmp;
    13             }
    14         }
    15     }
    16     return $array;
    17 }
    18 
    19 $arr=array(32,43,21,54,15,17,13,18,43,87);
    20 print_r(maopaoSort($arr));

    三、杨辉三角

     1 <?php
     2 function yanghui($n){
     3   for($i=0;$i<$n;$i++){
     4     for($j=0;$j<=$i;$j++){
     5        if($j==0||$i==$j){
     6          $arr[$i][$j]=1;
     7           }else {
     8              $arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j];
     9            }
    10      echo $arr[$i][$j]."	";
    11        }
    12       echo "<br>";
    13    }
    14 }
    15 yanghui(10);

    四、二分法

     1 <?php
     2 /**二分查找:查找一个值在数组中的位置
     3 * @$arr:操作的数组,前提是按顺序排列
     4 * @$val:查找的值
     5 * @$low:查找的起始位置,默认从数组的第一个数找起
     6 * @hight:查找的结束位置
     7 **/
     8 function binarySearch($arr, $val, $hight, $low=0){
     9     while($low <= $hight){
    10         $mid = ceil($low + ($hight - $low) / 2);
    11         if($arr[$mid] == $val){
    12             return $mid;
    13         }elseif($arr[$mid] > $val){
    14             $hight = $mid -1;
    15         }else{
    16             $low = $mid +1;
    17         }
    18     }
    19     return -1;
    20 }
    21 header('Content-Type:text/html; charset=utf-8');
    22  
    23 //产生一个数组
    24 $arr = range(0,20);
    25 echo '<pre>';
    26 print_r($arr);
    27 echo '</pre>';
    28  
    29 $low = 0;
    30 $hight = count($arr) - 1;
    31 $findVal = rand(0, 20);
    32 $index = binarySearch($arr, $findVal, $hight, $low);
    33 printf("查找的值 '%d' 在数组中的下标 '%s'", $findVal, $index);
    34 ?>
  • 相关阅读:
    win shift s截图不能用(已解决)
    阿里云ssl证书过期怎么解决 (免费SSL证书) 三步解决
    图解 Java 数据结构
    微信小程序简介
    序列化类外键字段的覆盖,十大接口序列化总结,视图家族
    response二次封装,夺标关系优化,多表序列化,十大接口
    内部类,drf响应类,序列化与反序列化
    drf以及django应用
    DRF框架知识总览
    实例成员:计算属性 监听属性以及vue的项目开发
  • 原文地址:https://www.cnblogs.com/jacson/p/4498474.html
Copyright © 2020-2023  润新知