PHPはよく泡立ち、高速ソートアルゴリズムを使う.2点、順序検索推奨
14011 ワード
一、泡立ちソート
基本思想:
並べ替えが必要な配列を後から前(逆)に複数回走査し,隣接する2つの数値の順序が並べ替え要求の規則と一致しないことが分かった場合,この2つの数値を交換する.このように小さい(大きい)数値は徐々に後ろから前に移動します.
//泡立ち順
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
二、快速並べ替え
基本思想:
配列から1つの要素(複数は1つ目)をスケールとして選択し、1つの配列をスキャンしてスケールより小さい要素をスケールの前に配置し、スケールより大きい要素をすべてスケールの後に配置し、再帰的に各サブシーケンスをすべてのシーケンスが一致するまでそれぞれ小さいシーケンスに分割します.
//クイックソート
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
三、二分検索
基本思想:
データが昇順に並べ替えられていると仮定し、所与の値xについて、シーケンスの中間位置から比較し、現在の位置値がxに等しい場合、検索に成功する.xが現在の位置値より小さい場合は、数列の前半で検索します.xが現在の位置値より大きい場合は、見つかるまで数列の後半で検索を続けます.(データ量が多いときに使う)
//二分検索
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
四、順序検索
基本思想:
配列の最初の要素から1つずつ下へ検索し、ターゲットと一致する要素があれば検索に成功します.最後の要素にターゲット要素がない場合は、検索に失敗します.
//シーケンシャル検索
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
五、1つの関数を書いて、1つのファイルの下のすべてのファイルとサブフォルダを遍歴することができます
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
六、関数を書き、できるだけ効率的に標準urlからファイルの拡張子を取り出す
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
七、中国語文字列の無文字化を実現する方法
mb_を使用可能substrですがphpに確保する必要があります.iniにphp_がロードされましたmbstring.dllは、「extension=php_mbstring.dll」という行が存在し、コメントされていないことを確認します.そうしないと、関数が定義されていないという問題が発生します.
基本思想:
並べ替えが必要な配列を後から前(逆)に複数回走査し,隣接する2つの数値の順序が並べ替え要求の規則と一致しないことが分かった場合,この2つの数値を交換する.このように小さい(大きい)数値は徐々に後ろから前に移動します.
//泡立ち順
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
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
));
?>
二、快速並べ替え
基本思想:
配列から1つの要素(複数は1つ目)をスケールとして選択し、1つの配列をスキャンしてスケールより小さい要素をスケールの前に配置し、スケールより大きい要素をすべてスケールの後に配置し、再帰的に各サブシーケンスをすべてのシーケンスが一致するまでそれぞれ小さいシーケンスに分割します.
//クイックソート
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
//
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
));
?>
三、二分検索
基本思想:
データが昇順に並べ替えられていると仮定し、所与の値xについて、シーケンスの中間位置から比較し、現在の位置値がxに等しい場合、検索に成功する.xが現在の位置値より小さい場合は、数列の前半で検索します.xが現在の位置値より大きい場合は、見つかるまで数列の後半で検索を続けます.(データ量が多いときに使う)
//二分検索
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
//
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));
?>
四、順序検索
基本思想:
配列の最初の要素から1つずつ下へ検索し、ターゲットと一致する要素があれば検索に成功します.最後の要素にターゲット要素がない場合は、検索に失敗します.
//シーケンシャル検索
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
//
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;
}
}
?>
五、1つの関数を書いて、1つのファイルの下のすべてのファイルとサブフォルダを遍歴することができます
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
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(
'../'
));
?>
六、関数を書き、できるだけ効率的に標準urlからファイルの拡張子を取り出す
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
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'
));
?>
七、中国語文字列の無文字化を実現する方法
mb_を使用可能substrですがphpに確保する必要があります.iniにphp_がロードされましたmbstring.dllは、「extension=php_mbstring.dll」という行が存在し、コメントされていないことを確認します.そうしないと、関数が定義されていないという問題が発生します.