>  기사  >  백엔드 개발  >  PHP에서 알고리즘을 배워야 합니까?

PHP에서 알고리즘을 배워야 합니까?

angryTom
angryTom원래의
2019-10-19 09:50:052812검색

PHP에서 알고리즘을 배워야 합니까?

PHP는 알고리즘을 배워야 하나요?

배워야 합니다. 요즘 PHP 학습 및 사용에서 발생하는 문제는 기본적으로 함수와 관련되어 있지만 우리는 거의 접하지 않습니다. 프로그램 = 데이터 구조 + 알고리즘을 알아야 합니다. 이는 알고리즘이 프로그램에 얼마나 중요한지 보여줍니다.

고급 레벨로 가려면 알고리즘과 데이터 구조를 알아야 하는데, PHP의 운영 효율성이 너무 낮아서 PHP를 사용하여 구현할 수 없습니다. 일반적으로 알고리즘 레벨을 완료하려면 루프가 많이 필요합니다. 수학적 문제 및 PHP에서 알고리즘 구현에 대한 표준 접근 방식은 이를 C 확장으로 만드는 것입니다. 즉, 알고리즘은 C로 구현되어야 하며 PHP C 확장을 개발하는 방법을 배워야 합니다.

기본 알고리즘:

버블 정렬

//逐行对比,满足条件则交换
function bubbleSort($arrData,$sort = 'desc')
{
    if(empty($arrData)) return $arrData;
    //默认有序
    $isSorted = true;
    $nCount = count($arrData);
    for($i = 0; $i < $nCount; $i++) {
        //对比次数随着循环逐渐减少,因为后面的数据已经处理为有序
        for($j = 0; $j < ($nCount - $i - 1); $j++) {
            //执行判断
            $isChange = $sort == &#39;desc&#39; ? $arrData[$j] < $arrData[$j+1] : $arrData[$j] > $arrData[$j+1];
            if($isChange) {
                //首次对比,判断是否有序
                $isSorted = false;
                $temp = $arrData[$j];
                $arrData[$j] = $arrData[$j+1];
                $arrData[$j+1] = $temp;
            }
        }
        if($isSorted) break;
    }
    return $arrData;
}

빠른 정렬

//选取一个标准,和其他数据对比后将数据分为两批,递归执行后合并
function quickSort(&$arr, $sort = &#39;asc&#39;){
    //检查数据,多于一个数据才执行
    $nCount = count($arr);
    if($nCount > 1) {
        //选取标准(第一个数据)
        $nStandard = $arr[0];
        $arrLeftData = [];
        $arrRightData = [];
        //遍历,注意这里从1开始比较
        for($i = 1; $i < $nCount; $i++) {
            if($sort == &#39;desc&#39;) {
                $arr[$i] > $nStandard ? $arrLeftData[] = $arr[$i] : $arrRightData[] = $arr[$i];
            } else {
                $arr[$i] > $nStandard ? $arrRightData[] = $arr[$i] : $arrLeftData[] = $arr[$i];
            }
        }
        $arr = array_merge($this->quickSort($arrLeftData, $sort), array($nStandard), $this->quickSort($arrRightData, $sort));
    }
    return $arr;
}

이진 검색

//假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;
//若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止
function binSearch($toSearch,$arr)
{
    //确定当前的检索范围
    $nCount = count($arr);
    //低位键,初始为0
    $nLowNum = 0;
    //高位键,初始为末尾 
    $nHighNum = $nCount - 1;
    while($nLowNum <= $nHighNum) {
        //选定大概中间键
        $nMiddleNum = intval(($nHighNum + $nLowNum)/2);
        if($arr[$nMiddleNum] > $toSearch) {
            //比检索值大
            $nHighNum = $nMiddleNum - 1;
        } elseif ($arr[$nMiddleNum] < $toSearch) {
            //比检索值小
            $nLowNum = $nMiddleNum + 1;
        } else {
            return $nMiddleNum;
        }
    }
    return false;
}

순차 검색

function seqSearch($arr,$toSearch)
{
    $nCount = count($arr);
    for ($i=0; $i < $nCount; $i++) {
        if ($arr[$i] == $toSearch) {
            return $i;
        }
    }
    return -1;
}

정렬 선택

//在第一次循环中,假设第一个数是最小的;然后跟第二个数比较,一直比到最后,找出最小值,然后把最小值跟第一个数的位置互换;
//再进行下一次循环,找出最小值跟第二个位置的数互换;一直循环数组的个数减去1次;数组就成了有序的了 
function selectSort($arr)
{
    $nCount = count($arr);
    //遍历取得需要排序的数
    for($i = 0; $i < $nCount; $i++) {
        //选择需要比较的数,从$i开始到结束
        for($j = $i + 1; $j < $nCount; $j++) {
            //比较
            if($arr[$j] < $arr[$i]) {
                $temp = $arr[$i];
                $arr[$i] = $arr[$j];
                $arr[$j] = $temp;
            }
        }
    }
    return $arr;  
}

추가 PHP 관련 항목 지식이 있으신 분들은 PHP 중국어 홈페이지를 방문해주세요!

위 내용은 PHP에서 알고리즘을 배워야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.