Compiler des questions d'entretien courantes sur l'algorithme PHP

藏色散人
Libérer: 2023-04-10 06:56:01
avant
5241 Les gens l'ont consulté

Cet article présente et organise les questions d'entretien courantes sur l'algorithme PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

1. Tri par insertion (tableau unidimensionnel) L'idée de base : Chaque fois qu'un élément de données à trier est inséré à la position appropriée dans le tableau précédemment trié, afin que le tableau reste en ordre jusqu'à ce que le tableau soit trié. l'élément de données doit être trié, trier jusqu'à ce que tous les éléments de données soient insérés.

Exemple :

[Mot clé initial] [49] 38 65 97 76 13 27 49

J=2(38) [38 49] 65 97 76 13 27 49

J=3(65) [38 49 65] 97 76 13 27 49

J=4(97) [38 49 65 97] 76 13 27 49

J=5(76) [38 49 65 76 97] 13 27 49

J=6(13) [13 38 49 65 76 97] 27 49

J=7(27) [13 27 38 49 65 76 97] 49

J=8(49) [13 27 38 49 49 65 76 97]

function insert_sort($arr){
    $count = count($arr);   
    for($i=1; $i<$count; $i++){      
        $tmp = $arr[$i];        
        $j = $i - 1;        
        while($arr[$j] > $tmp){          
            $arr[$j+1] = $arr[$j];          
            $arr[$j] = $tmp;            
            $j--;           
        }    
    }    
    return $arr; 
}
Copier après la connexion

2. Idée : à chaque passe, l'élément le plus petit (ou le plus grand) est sélectionné parmi les éléments de données à trier, et l'ordre est placé à la fin de la séquence triée jusqu'à ce que tous les éléments de données à trier soient disposés. Exemple :

[Mot clé initial] [49 38 65 97 76 13 27 49]

13 après le premier tri [38 65 97 76 49 27 49]

Après le deuxième tri 13 27 [65 97 76 49 38 49]

Après le troisième tri 13 27 38 [97 76 49 65 49]

Après le quatrième tri 13 27 38 49 [49 97 65 76]

Après le cinquième tri 13 27 38 49 49 [97 97 76]

Après le sixième tri 13 27 38 49 49 76 [76 97]

Après le septième tri, 13 27 38 49 49 76 76 [97]

Le résultat final du tri est 13 27 38 49 49 76 76 97

function select_sort($arr){     
    $count = count($arr);   
    for($i=0; $i<$count; $i++){      
        $k = $i;        
        for($j=$i+1; $j<$count; $j++){           
            if ($arr[$k] > $arr[$j]) $k = $j;        
        }       
        if($k != $i){           
            $tmp = $arr[$i];            
            $arr[$i] = $arr[$k];            
            $arr[$k] = $tmp;        
        }   
    }   
    return $arr; 
}
Copier après la connexion

3. idée : comparer les tailles des éléments de données à trier par paire, et lorsqu'on constate que l'ordre des deux éléments de données est inversé, ils sont échangés jusqu'à ce qu'il n'y ait plus d'éléments de données inversés. Processus de tri : Imaginez que le tableau trié R [1..N] soit érigé verticalement et que chaque élément de données soit considéré comme une bulle pondérée. Selon le principe selon lequel les bulles légères ne peuvent pas se trouver sous les bulles lourdes, le tableau R est balayé par le bas. vers le haut Chaque fois qu'une bulle légère qui viole ce principe est scannée, elle est amenée à « flotter » vers le haut. Ce processus est répété jusqu'à ce que les deux dernières bulles soient la plus légère en haut et la plus lourde en bas.

Exemple :

49 13 13 13 13 13 13 13

38 49 27 27 27 27 27 27

65 38 49 38 38 38 38 38

97 65 38 49 49 49 49 49

76 97 65 49 49 49 49 49

13 76 97 65 65 65 65 65

27 27 76 97 76 76 76 76

49 49 49 76 97 97 97 97

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; 
}
Copier après la connexion

4. Tri rapide (tableau unidimensionnel) Idée de base : Dans la zone non ordonnée actuelle R [1.. H ] Prenez n'importe quel élément de données comme "ligne de base" pour la comparaison (peut-être enregistré sous la forme R [I 1..H], et les éléments de données dans la sous-zone non ordonnée à gauche sont tous inférieurs ou égaux à l'élément de référence, les éléments de données dans la sous-zone non ordonnée à droite sont tous supérieurs ou égaux à l'élément de référence, et la référence X est située à la position de tri finale, c'est-à-dire R [1..I-1]≤X. Clé≤RI 1..H, lorsque R [1..I-1] et R [I 1..H] ne sont pas vides, effectuez le processus de division ci-dessus jusqu'à ce que tous les éléments de données des sous-zones non ordonnées soient triés. Exemple :

Mot clé initial [49 38 65 97 76 13 27 49]

Après le premier échange [27 38 65 97 76 13 49 49]

Deuxième après le troisième échange [27 38 49 97 76 13 65 49]

J scanne vers la gauche, la position reste inchangée, après le troisième échange [27 38 13 97 76 49 65 49]

I Scan à droite, la position reste inchangée, après le quatrième échange [27 38 13 49 76 97 65 49]

J Scan à gauche [27 38 13 49 76 97 65 49]

( Processus d'une division)

Mot clé initial [49 38 65 97 76 13 27 49]

Après un tri [27 38 13] 49 [76 97 65 49]

Après deux tris [13] 27 [38] 49 [49 65] 76 [97]

Après trois tris 13 27 38 49 49 [65] 76 97

Tri final Résultat 13 27 38 49 49 65 76 97

Statut après chaque tri

function quickSort(&$arr){    
    if(count($arr)>1){
        $k=$arr[0];
        $x=array();
        $y=array();
        $_size=count($arr);        
        for($i=1;$i<$_size;$i++){            
            if($arr[$i]<=$k){
                $x[]=$arr[$i];
            }elseif($arr[$i]>$k){
                $y[]=$arr[$i];
            }
        }
        $x=quickSort($x);
        $y=quickSort($y);        
        return array_merge($x,array($k),$y);
    }else{ 
        return$arr;
    }
}
Copier après la connexion

5. Shell sort (shell sort) — O (n log n)

functionshell_sort(&$arr){    
    if(!is_array($arr))return;
    $n=count($arr);    
    for($gap=floor($n/2);$gap>0;$gap=floor($gap/=2)){
        for($i=$gap;$i<$n;++$i){
            for($j=$i-$gap;$j>=0&&$arr[$j+$gap]<$arr[$j];$j-=$gap){                
                $temp=$arr[$j];                
                $arr[$j]=$arr[$j+$gap];                
                $arr[$j+$gap]=$temp;
            }
        }
    }
}
Copier après la connexion

6. >

/** 
* 二分算法查找 
* @param array $array 要查找的数组 
* @param int $min_key 数组的最小下标 
* @param int $max_key 数组的最大下标 
* @param mixed $value 要查找的值 
* @return boolean 
*/ 
function bin_search($array,$min_key,$max_key,$value){             
    if($min_key <= $max_key){ 
        $key = intval(($min_key+$max_key)/2); 
        if($array[$key] == $value){ 
            return true; 
        }elseif($value < $array[$key]){ 
            return bin_search($array,$min_key,$key-1,$value);
        }else{ 
            return bin_search($array,$key+1,$max_key,$value);
        }   
    }else{      
        return false;   
    } 
}
Copier après la connexion

7. Suppression du tableau linéaire (implémenté dans un tableau)

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; 
}
Copier après la connexion

8. Longueur de chaîne

function strlen($str)   { 
    if ($str == &#39;&#39;) return 0; 
    $count = 0; 
    while (1){ 
        if ($str[$count] != NULL){ 
            $count++; 
            continue; 
        }else{ 
            break; 
        } 
    } 
    return $count; 
}
Copier après la connexion

9. 🎜>
function strrev($str)   {   
    if ($str == &#39;&#39;) return 0;   
    for ($i=(strlen($str)-1); $i>=0; $i--){   
        $rev_str .= $str[$i];   
    }   
    return $rev_str; 
}
Copier après la connexion

11. Rechercher une chaîne

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; 
}
Copier après la connexion

12. Remplacement de chaîne

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; 
}
Copier après la connexion

13. Insérer une chaîne

function str_replace($substr, $newsubstr, $str) { 
    $m = strlen($str); 
    $n = strlen($substr); 
    $x = strlen($newsubstr); 
    if (strchr($str, $substr) == false) return false; 
    for ($i=0; $i<=($m-$n+1); $i++){ 
        $i = strchr($str, $substr); 
        $str = str_delete($str, $i, $n); 
        $str = str_insert($str, $i, $newstr); 
    } 
    return $str; 
}
Copier après la connexion

14. 🎜>15. Copiez une chaîne

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; 
}
Copier après la connexion

17. Fonction d'encodage simple (correspondant à la fonction php_decode)

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; 
}
Copier après la connexion

18. 🎜>19. Fonction de cryptage simple (correspondant à la fonction php_decrypt)

function strcpy($s1, $s2){ 
    if (strlen($s1)==NULL || !isset($s2)) return; 
    for ($i=0; $i<strlen($s1); $i++){ 
        $s2[] = $s1[$i]; 
    } 
    return $s2; 
}
16、连接字符串
function strcat($s1, $s2){ 
    if (!isset($s1) || !isset($s2)) return; 
    $newstr = $s1; 
    for($i=0; $i<count($s); $i++){ 
        $newstr .= $st[$i]; 
    } 
    return $newsstr; 
}
Copier après la connexion

20. Fonction de décryptage simple (correspondant à la fonction php_encrypt)

function php_encode($str)    { 
    if ($str==&#39;&#39; && strlen($str)>128) 
        return false;
    for($i=0; $i<strlen($str); $i++){ 
        $c = ord($str[$i]); 
        if ($c>31 && $c<107) 
            $c += 20; 
            if ($c>106 && $c<127) 
                $c -= 75; 
                $word = chr($c); 
                $s .= $word; 
            } 
            return $s; 
        }
    }
}
Copier après la connexion

Apprentissage recommandé : "

Tutoriel vidéo PHP

"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!