>  기사  >  백엔드 개발  >  PHP의 기본 알고리즘 모음

PHP의 기본 알고리즘 모음

不言
不言원래의
2018-04-24 13:58:215235검색

이 글은 주로 PHP의 기본 알고리즘 모음을 소개하는데, 이는 특정 참조 값을 가지고 있습니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들이 참조할 수 있습니다.

이진 검색(배열에서 특정 요소 찾기)

function bin_sch($array,  $low, $high, $k){   
    if ( $low <= $high){   
        $mid =  intval(($low+$high)/2 );   
        if ($array[$mid] ==  $k){   
            return $mid;   
        }elseif ( $k < $array[$mid]){   
            return  bin_sch($array, $low,  $mid-1, $k);   
        }else{   
            return  bin_sch($array, $mid+ 1, $high, $k);   
        }   
    }   
    return -1;   
}


이 방법은 인덱스 배열을 기반으로 하며 값이 작은 것부터 큰 것까지 정렬됩니다.
연관 배열은 적용할 수 없으며, 배열 정렬 방법이 일치하지 않거나 정렬이 없습니다. 정렬을 추가하려면 if 조건을 적절하게 수정하세요.

순차 검색(배열에서 요소 찾기)

function  seq_sch($array, $n,  $k){   
    $array[$n] =  $k;   
    for($i=0;  $i<$n; $i++){   
        if( $array[$i]==$k){   
            break;   
        }   
    }   
    if ($i<$n){   
        return  $i;   
    }else{   
        return -1;   
    }   
}   

此方法适用于索引数组并且$n = count($array);

단순화 및 개선 버전

function  seq_sch($array, $k){   
    $y = $m = &#39;no&#39;; 
    foreach($array as $i => $v){
        if($v == $k){  
            if($i == &#39;no&#39;){$m = &#39;yes&#39;}//防止key = no
            $y = $i; 
            break;   
        }   
    }   
    if ($y != &#39;no&#39; || $m == &#39;yes&#39;){   
        return  $y;   
    }else{   
        return -1;   
    }   
}   

此方法适用于所有一维数组

선형 테이블 삭제(배열로 구현)

function delete_array_element($array , $i){  
    $len = count($array);   
    for ($j=$i; $j<$len; $j++){  
            $array[$j] = $array [$j+1];  
    }  
    array_pop ($array);  
    return $array ;  
}

$i는 삭제 매개변수 위치를 지정합니다

버블 정렬(배열 정렬)

function bubble_sort($array){  
    $count = count( $array);  
    if ($count <= 0 ) return false;  
    for($i=0 ; $i<$count; $i ++){  
        for($j=$count-1 ; $j>$i; $j--){  
            if ($array[$j] < $array [$j-1]){  
                //引用第三变量进项数组交换
                $tmp = $array[$j];  
                $array[$j] = $array[ $j-1];  
                $array [$j-1] = $tmp;  
             }  
         }  
     }  
     return $array;  
 }

빠른 정렬(배열 정렬)

function quick_sort($array ) {  
    if (count($array) <= 1) return  $array;  
    $key = $array [0];  
    $left_arr  = array();  
    $right_arr = array();  
    for ($i= 1; $i<count($array ); $i++){  
        if ($array[ $i] <= $key)  
            $left_arr [] = $array[$i];  
        else  
            $right_arr[] = $array[$i];  
    }  
    $left_arr = quick_sort($left_arr);  
    $right_arr = quick_sort($right_arr);  
    return array_merge($left_arr , array($key), $right_arr);  
}

문자열 길이

function strlen ($str){  
    if ($str == &#39;&#39; ) return 0;  
    $count =  0;  
    while (1){  
        if ($str[$count] != NULL){  
            $count++;  
            continue;  
        }else{  
            break;  
        }  
    }  
    return $count;  
}
  • while (1) 여기서 1은 상수 표현식을 나타내며 절대 0과 같지 않습니다. 따라서 루프는 계속 실행됩니다. 루프에서 벗어나기 위해 break 또는 유사한 문을 설정하지 않으면 루프가 종료됩니다

  • $str[count] PHP는 약한 유형의 언어입니다. 해당 위치에서 해당 매개변수를 읽으려면 아래 첨자를 사용하세요.

Intercept substring

function substr($str, $start,  $length=NULL){  
    if ($str== &#39;&#39; || $start>strlen($str)) return;  
    if (($length!=NULL) && ($start>0) && ($length>strlen($str)-$start)) return;  
    if (($length!=NULL) && ($start<0) && ($length>strlen($str )+$start)) return;  
    if ($length == NULL) $length = (strlen($str) - $start);  

    if ($start < 0){  
            for ($i=(strlen($str)+$start); $i<(strlen ($str)+$start+$length ); $i++) {  
                 $substr .=  $str[$i];  
            }  
    }  
    if ($length > 0){  
            for ($i= $start; $i<($start+$length); $i++) {  
                  $substr .= $str[$i];  
            }  
    }  
    if ($length < 0){  
            for ($i =$start; $i<(strlen($str)+$length); $i++) {  
                   $substr .= $str[$i ];  
            }  
    }  
    return $substr;

}

String Flip

function strrev($str){  
    if ($str == &#39;&#39;) return 0 ;  
    for ($i=(strlen($str)- 1); $i>=0; $i --){  
            $rev_str .= $str[$i ];  
    }  
    return $rev_str;  
}

String 비교

function strcmp($s1, $s2){  
    if (strlen($s1) <  strlen($s2)) return -1 ;  
    if (strlen($s1) > strlen( $s2)) return 1;  
    for ($i=0; $i<strlen($s1); $i++){  
        if ($s1[$i] == $s2[$i]){  
            continue;  
        }else{  
            return false;  
        }  
    }  
    return  0;  
}

Find string

function  strstr($str, $substr){  
    $m = strlen($str);  
    $n = strlen($substr);  
    if ($m < $n) return false ;  
    for($i=0; $i<=($m-$n+1); $i++){  
        $sub = substr($str, $i, $n);  
        if (strcmp($sub, $substr) ==  0)  return $i;  
    }  
    return false ;  
}

strcmp(

substr) 비교 방법을 사용하지 않으려면, for 루프를 추가하세요


문자열 교체

function str_replace($substr, $newsubstr, $str){  
    $m = strlen($str);  
    $n = strlen($substr);  
    $x = strlen($newsubstr);  
    if (strchr($str, $substr) == false) return false;
    $str_new = $str  
    for ($i=0; $i<=($m-$n+1); $i++){  
        $i = strchr($str, $substr);  
        $str = str_delete($str_new, $i, $n);  
        $str = str_insert($str_new, $i, $newstr);  
    }  
    return $str_new;  
}
  • strchr() 함수는 다른 문자열 내에서 처음 나타나는 문자열을 검색합니다.
    이 함수는 strstr() 함수의 별칭입니다.

문자열 삽입

function str_insert($str, $i , $substr) {  
    for($j=0 ; $j<$i; $j++){  
            $startstr .= $str[$j];  
    }  
    for ($j=$i; $j <strlen($str); $j++){  
            $laststr .= $str[$j ];  
    }  
    $str = $startstr.$substr.$laststr;  
    return $str ;  
}

문자열 삭제

function str_delete($str, $i, $j){  
    for ( $c=0; $c<$i; $c++){  
        $startstr .= $str [$c];  
    }  
    for ($c=( $i+$j); $c<strlen ($str); $c++){  
        $laststr .= $str[$c];  
    }  
    $str = $startstr.$laststr;  
    return $str;  
}

문자열 복사

function strcpy($s1, $s2){  
    if (strlen($s1)==NULL || !isset($s2)) return;  
    for ($i=0; $i<strlen($s1); $i++){  
        $s2[] = $s1[$i];  
    }  
    return $s2;  
}

문자열 연결

function strcat($s1 ,$s2){  
    if (!isset($s1) || !isset( $s2)) return;  
    $newstr = $s1 ;  
    for($i=0; $i<strlen($s2); $i++){  
            $newstr .= $s2[$i];  
    }  
    return $newstr;  
}

위 내용은 PHP의 기본 알고리즘 모음의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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