ホームページ >バックエンド開発 >PHPチュートリアル >基本的なデータ構造アルゴリズム_PHP チュートリアル
//---------------------
//基本的なデータ構造アルゴリズム
//---------------------
//二分探索 (配列内の要素を検索)
関数 bin_sch($array, $low, $high, $k){
If ($low
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k
return bin_sch($array, $low, $mid-1, $k);
}それ以外{
return bin_sch($array, $mid+1, $high, $k);
}
-1 を返します。
}
//逐次検索 (配列内の要素を検索)
関数 seq_sch($array, $n, $k){
$array[$n] = $k;
for($i=0; $i
if($array[$i]==$k){
壊す;
}
If ($i
$i を返す;
}その他{
return -1;
}
}
//線形テーブルの削除(配列で実装)
関数 delete_array_element($array, $i)
{
$len = count($array);
for ($j=$i; $j
$array[$j] = $array[$j+1];
}
array_pop($array);
$array を返します。
}
//バブルソート(配列ソート)
関数 bubble_sort($array)
{
$count = count($array);
if ($count
for($i=0; $i
for($j=$count-1; $j>$i; $j--){
if($ array [$ j]< $ array [$ j-1]){
}
$array を返します。
}
//クイックソート(配列ソート)
関数クイックソート($array) {
if (count($array)
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i
$right_arr[] = $array[$i];
}
$left_arr = クイックソート($left_arr);
$right_arr = クイックソート($right_arr);
array_merge($left_arr, array($key), $right_arr) を返します
}
//------------------------
// PHP 組み込み文字列関数の実装
//------------------------
//文字列の長さ
関数 strlen($str)
{
if ($str == '') は 0 を返します
$count = 0;
ながら (1){
If ($ Str [$ Count]! = Null) {
続く;
壊す;
}
$count を返します。
}
//部分文字列をインターセプトします
関数 substr($str, $start, $length=NULL)
{
If ($str=='' || $start>strlen($str))
If (($length!=NULL) && ($start>0) && ($length>strlen($str)-$start))
を返します。
If (($length!=NULL) && ($startstrlen($str)+$start))
If ($length == NULL) $length = (strlen($str) - $start);
if ($start
for ($i=(strlen($str)+$start); $i
}
if ($length > 0){
for ($i=$start; $i
}
if ($length
for ($i=$start; $i
}
戻り $substr;
}
//文字列反転
関数 strrev($str)
{
if ($str == '') は 0 を返します
for ($i=(strlen($str)-1); $i>=0; $i--){
$rev_str .= $str[$i];
}
戻り $rev_str;
}
//文字列比較
関数 strcmp($s1, $s2)
{
(strlen($s1)
for ($i=0; $i
続く;
false を返します。
}
0 を返します。
}
//文字列を検索します
関数 strstr($str, $substr)
{
$m = strlen($str);
$n = strlen($substr);if ($m
for ($i=0; $i
$sub = substr($str, $i, $n);
If (STRCMP ($ substr) == 0) $ i を返します。
}
偽を返します
}
//文字列置換
関数 str_replace($substr, $newsubstr, $str)
{
$m = strlen($str);
$n = strlen($substr);
$x = strlen($newsubstr);
if (strchr($str, $substr) == false) は false を返します
for ($i=0; $i
$i = strchr($str, $substr);
$str = str_delete($str, $i, $n);
$str = str_insert($str, $i, $newstr);
}
$str を返します。
}
//---------------------
// 自己実装した文字列処理関数
//---------------------
//文字列を挿入します
関数 str_insert($str, $i, $substr)
{
for($j=0; $j
$startstr .= $str[$j];
}
for ($j=$i; $j
$str = ($startstr . $substr . $laststr);
$str を返します。
}
//文字列を削除します
関数 str_delete($str, $i, $j)
{
for ($c=0; $c
$startstr .= $str[$c];
}
for ($c=($i+$j); $c
$str = ($startstr . $laststr);
$str を返します。
}
//文字列をコピー
関数 strcpy($s1, $s2)
{
if (strlen($s1)==NULL || !isset($s2))
を返します。
for ($i=0; $i
$s2 を返します。
}
//接続文字列
関数 strcat($s1, $s2)
{
If (!isset($s1) || !isset($s2))
を返します。
$newstr = $s1;
for($i=0; $i
$newsstr を返します。
}
//簡易エンコード関数(php_decode関数に相当)
関数 php_encode($str)
{
if ($str=='' && strlen($str)>128) は false を返します
for($i=0; $i
$s を返す;
}
//簡易デコード関数(php_encode関数に相当)
関数 php_decode($str)
{
if ($str=='' && strlen($str)>128) は false を返します。
for($i=0; $i
if ($c>106 && $c
if ($c>31 && $c
$word = chr($c);
$s .= $word;
}
$s を返します。
}
//简单加密関数数(与php_decrypt関数数对应)
関数 php_encrypt($str)
{
$encrypt_key = 'abcdefghijklmnopqrstuvwxyz1234567890';
$decrypt_key = 'ngzqtcobmuhelkpdawxfyivrsj2468021359';
if (strlen($str) == 0) false を返します。
for ($i=0; $i
$enstr .= $decrypt_key[$j];
壊す;
}
}
}
$enstr を返します。
}
//简单解密関数数(与php_encrypt関数数对应)
関数 php_decrypt($str)
{
$encrypt_key = 'abcdefghijklmnopqrstuvwxyz1234567890';
$decrypt_key = 'ngzqtcobmuhelkpdawxfyivrsj2468021359';
if (strlen($str) == 0) false を返します。
for ($i=0; $i
$enstr .= $encrypt_key[$j];
壊す;
}
}
}
$enstr を返します。
}
?>