php常用算法
来源:互联网 发布:knn算法matlab 编辑:程序博客网 时间:2024/05/17 12:05
一、冒泡排序
基本思想:
对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换。这样比较小(大)的数值就将逐渐从后面向前面移动。
//冒泡排序
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
<?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
));
?>
二、快速排序
基本思想:
在数组中挑出一个元素(多为第一个)作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,通过递归将各子序列分别划分为更小的序列直到所有的序列顺序一致。
//快速排序
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
<?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
));
?>
三、二分查找
基本思想:
假设数据是按升序排序的,对于给定值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
<?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));
?>
四、顺序查找
基本思想:
从数组的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败。
//顺序查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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;
}
}
?>
五、写一个函数,能够遍历一个文件下的所有文件和子文件夹
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
<?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(
'../'
));
?>
六、写一个函数,尽可能高效的从一个标准url中取出文件的扩展名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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'
));
?>
七、实现中文字符串截取无乱码的方法
可使用mb_substr,但是需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。
阅读全文
0 0
- php常用算法总结
- PHP常用算法
- PHP常用算法
- php常用排序算法
- php常用算法整理
- PHP常用算法
- php常用算法
- php常用算法
- php 常用算法
- 常用算法PHP版
- php常用算法
- 七大常用PHP算法
- php常用算法
- PHP面试常用算法
- php常用算法
- PHP 常用算法
- php各种常用算法
- php常用排序算法
- 百度和高德地图接口取经纬度都有失效的时候,把两者结合起来用,才是解决之道。
- ASP.NET通过ajax调用后台方法
- gnuplot : 读取csv 文件, 画基金净值线
- Ping命令检测网站运行状态
- 认识java
- php常用算法
- 45.笔记go语言圣经——go语言变量
- 46.笔记go语言圣经——go运行时
- 数据库垂直拆分与水平拆分
- 47.笔记go——go连接Oracle
- 48.笔记go语言圣经——go图形化
- 《如何运行第一个C/C++语言程序》
- 49.笔记go语言——实现斐波那契
- JavaSE基础03