小算法集合

一個隨機數值數組,請將它排序後,一個值$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);

 

 

本文爲dahai原創文章,轉載無需和我聯繫,但請註明來自大海技術博客https://www.ypyunedu.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章