この記事で紹介する内容は、PHP で一般的に使用されるバブル ソートとクイック ソート アルゴリズムとバイナリ検索と逐次検索アルゴリズムの実装に関するものです。一定の参考価値があります。必要な友人が参考にしていただければ幸いです。助けます。
1. バブルソート
基本的な考え方:
配列を後ろから前にソート (逆順) 複数回実行スキャンを行った結果、隣接する 2 つの値の順序がソートに必要なルールと矛盾していることが判明した場合、2 つの値が交換されます。このように、小さい(大きい)値が後ろから前に徐々に移動します。
<?php function mysort($arr) { for($i = 0; $i < count($arr); $i++) { $isSort = false; for ($j=0; $j< count($arr) - $i - 1; $j++) { if($arr[$j] < $arr[$j+1]) { $isSort = true; $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp ; } } if($isSort) { break; } } return $arr; } $arr = array(3,1,2); var_dump(mysort($arr)); ?>
2. クイック ソート
基本的な考え方:
配列内の要素 (ほとんどの場合最初) を選択します。ルーラーを使用して配列を 1 回スキャンし、ルーラーより小さい要素をルーラーの前にソートし、ルーラーより大きいすべての要素をルーラーの後にソートし、すべてのシーケンスが同じ順序になるまで再帰によって各サブシーケンスを小さなシーケンスに分割します。 。
<?php //快速排序 function quick_sort($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 = quick_sort($left_array); $right_array = quick_sort($right_array); //合并左边 标尺 右边 return array_merge($left_array, array($base_num), $right_array); } $arr = array(3,1,2); var_dump(quick_sort($arr)); ?>
3、二分探索
基本的な考え方:
データが昇順に並べ替えられていると仮定します。与えられた値 x に対して、シーケンスの中間位置から開始し、現在の位置の値が x に等しい場合、検索は成功します。x が現在の位置の値より小さい場合、検索はシーケンスの前半で行われます。 x が現在位置の値より大きい場合、検索はシーケンスの後半になります。見つかるまで検索を続けます。 (データ量が多い場合に使用します)
<?php //二分查找 function bin_search($arr,$low,$high,$k) { if($low <= $high) { $mid = intval(($low + $high)/2); if($arr[$mid] == $k) { return $mid; } else if($k < $arr[$mid]) { return bin_search($arr,$low,$mid-1,$k); } else { return bin_search($arr,$mid+1,$high,$k); } } return -1; } $arr = array(1,2,3,4,5,6,7,8,9,10); print(bin_search($arr,0,9,3)); ?>
4. 順次検索
基本的な考え方:
から始める配列の先頭位置 要素を下方向に1つずつ検索し、一致する要素があれば検索成功、最後の要素まで目的の要素がなければ検索失敗となります。
<?php //顺序查找 function seq_search($arr,$n,$k) { $array[$n] = $k; for($i = 0;$i < $n; $i++) { if($arr[$i] == $k) { break; } if($i < $n) { return $i; } else { return -1; } } ?>
5. ファイルの下のすべてのファイルとサブフォルダーを走査できる関数を作成します
<?php function my_scandir($dir) { $files = array(); if($handle = opendir($dir)) { while (($file = readdir($handle))!== false) { if($file != '..' && $file != '.') { if(is_dir($dir."/".$file)) { $files[$file]=my_scandir($dir."/".$file); } else { $files[] = $file; } } } closedir($handle); return $files; } } var_dump(my_scandir('../')); ?>
6. できるだけ効率的な関数を作成します。標準 URL のファイル拡張子
<?php function getExt($url) { $arr = parse_url($url);//parse_url解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分 //'scheme' => string 'http' (length=4) //'host' => string 'www.sina.com.cn' (length=15) //'path' => string '/abc/de/fg.php' (length=14) //'query' => string 'id=1' (length=4) $file = basename($arr['path']);// basename函数返回路径中的文件名部分 $ext = explode('.', $file); return $ext[count($ext)-1]; } print(getExt('http://www.sina.com.cn/abc/de/fg.html.php?id=1')); ?>
7. 中国語文字列を文字化けせずにインターセプトする方法
mb_substr を使用できますが、php_mbstring を確認する必要があります。 .dll は php.ini にロードされます。つまり、「extension=php_mbstring.dll」という行が存在し、コメントアウトされていないことを確認してください。そうしないと、未定義の関数の問題が発生します。
関連する推奨事項:
PHP でのバブル ソート、丸めソート、挿入選別######
以上が一般的に使用されるバブル ソートおよびクイック ソート アルゴリズムとバイナリ検索および逐次検索アルゴリズムの PHP での実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。