小算法集合

一个随机数值数组,请将它排序后,一个值$num为数组中两个数值之和,取出他们的下标

$num =8;
$arr = array(120,2222,3,5,6,7,8,9,10,11,12);
test($num,$arr);
function test($num,$arr){
    sort($arr);
    $count = count($arr);
    for($i=0;$i<=$count;$i++) {
        if($arr[$i] + $arr[++$i] === $num){
            $info = [array_keys($arr,$arr[$i])[0],array_keys($arr,$arr[++$i])[0]];
            var_dump($info);
        }
    }
}

冒泡算法

function maopao($arr){
    $len = count($arr);
    for($k=0;$k<=$len;$k++)
    {
        for($j=$len-1;$j>$k;$j--){
            if($arr[$j]<$arr[$j-1]){
                $temp = $arr[$j];
                $arr[$j] = $arr[$j-1];
                $arr[$j-1] = $temp;
            }
        }
    }
    return $arr;
}
$a = [1,2,3,41,2,31223,1,3212,41,234,1,24,13,21,24,1,512,4324,5];
$cccc = maopao($a);
var_dump($cccc);

猴大王 1、一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,

  • 从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,
  • 那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号
function king($n, $m){
    $monkeys = range(1, $n);         //创建1到n数组
    $i=0;
    while (count($monkeys)>1) {     //循环条件为猴子数量大于1
        if(($i+1)%$m==0) {     //$i为数组下标;$i+1为猴子标号
            unset($monkeys[$i]);  //余数等于0表示正好第m个,删除,用unset删除保持下标关系
        } else {
            array_push($monkeys,$monkeys[$i]);     //如果余数不等于0,则把数组下标为$i的放最后,形成一个圆形结构
            unset($monkeys[$i]);
        }
        $i++;//$i 循环+1,不断把猴子删除,或 push到数组
    }
    return current($monkeys);  //猴子数量等于1时输出猴子标号,得出猴王
}
echo king(1116,3);

牛第四年开始生小牛,生的都是母牛,可以生到15年,第二年死亡,请问多少年可以到20头牛

function niu($y){
    static $num = 0;
    for ($i = 1; $i <= $y;$i++) {
        if($i >= 4 && $i<15) {
            $num++;
        } else if($i == 20) {
            return $num;
        }
    }
    return $num;
}

echo niu(20);

二分算法

function binsearch($x,$a){
    $c=count($a);
    $lower=0;
    $high=$c-1;
    while($lower<=$high){
        $middle=intval(($lower+$high)/2);
        var_dump($middle);
        if($a[$middle]>$x){
            $high=$middle-1;
        } elseif($a[$middle]<$x){
            $lower=$middle+1;
        } else{
            return $middle;
        }
    }
    return false;
}

$a = [1,2,3,41,2,31223,1,3212,41,234,1,24,13,21,24,1,512,4324,5];
$dd = binsearch(22,$a);
var_dump($dd);

快速排序算法

function quickSort($arr) {
    //先判断是否需要继续进行
    $length = count($arr);
    if($length <= 1) {
        return $arr;
    }
    //选择第一个元素作为基准
    $base_num = $arr[0];
    //遍历除了标尺外的所有元素,按照大小关系放入两个数组内
    //初始化两个数组
    $left_array = array();  //小于基准的
    $right_array = array();  //大于基准的
    for($i=1; $i<$length; $i++) {
        if($base_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($base_num), $right_array);
}
$a = [1,2,3,41,2,31223,1,3212,41,234,1,24,13,21,24,1,512,4324,5];
$dd = quickSort($a);
var_dump($dd);

大海技术博客
请先登录后发表评论
  • latest comments
  • 总共0条评论