Skip to content

Latest commit

 

History

History
119 lines (107 loc) · 2.99 KB

算法.md

File metadata and controls

119 lines (107 loc) · 2.99 KB

一.快速排序

function quick_sort($arr)
{
	if(!is_array($arr)) return false;
	$lenth = count($arr);
	if( $lenth <= 1 ) return $arr;
	$left = $right = array();
	for($i=1;$i<$lenth;$i++)
	{
		if($arr[$i]<$arr[0])
		{
			$left[] = $arr[$i];
		}
		else
		{
			$right[] = $arr[$i];
		}
	}
	$left = quick_sort($left);
	$right = quick_sort($right);
	return array_merge($left,array($arr[0]),$right);
}

二.冒泡排序

function maopao($arr)
{
    if(!is_array($arr)) return false;
    $lenth = count($arr);
    for($i=0;$i<$lenth;$i++)
    {
        for($j=1;$j<$lenth-$i;$j++)
        {
            //每一次循环将排序一个最大的值放在最后
            if($arr[$j-1]>$arr[$j])
            {
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j-1];
                $arr[$j-1] = $tmp; 
            }
        }
    }
}

三.队列是一种线性表,按照先进先出的原则进行,单向队列:只能从头进,从尾出;双向队列:头尾都可以进出

class Deque
{
    private $queue=array();
    public function addFirst($item)
    {
        return array_unshift($this->queue,$item);
    }
    public function addLast($item)
    {
        return array_push($this->queue,$item);
    }
    public function removeFirst()
    {
        return array_shift($this->queue);
    }
    public function removeLast()
    {
        return array_pop($this->queue);
    }
}

四.有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛

function t($n) 
{
    static $num = 1;
    for($j=1; $j<=$n; $j++)
    {
        if($j>=4 && $j<15) 
        {
            $num++;
            t($n-$j);
        }
        if($j==20)
        {
            $num--;
        }
    }
    return $num;
}

五.一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈, 从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止, 那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号

function monkey($m,$n)
{
    $arr = [];
    for($i=1;$i<=$n;$i++)
    {
        $arr[] = $i;
    }
    $i = 0;
    while( count($arr)>1 )
    {
        if( ($i+1)%$m ==0 )  
        {
            unset($arr[$i]);
        }
        else
        {
            array_push($arr,$arr[$i]);//把第m只猴子放在最后面
            unset($arr[$i]);//删除
        }
        $i++;
    }
    return $arr[$i];//返回结果
}

六.查找一个字符串中最长的无重复字串?