博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php常用算法
阅读量:5098 次
发布时间:2019-06-13

本文共 3581 字,大约阅读时间需要 11 分钟。

一、冒泡排序

基本思想:

对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换。这样比较小(大)的数值就将逐渐从后面向前面移动。

//冒泡排序

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(
''
));
 
?>

七、实现中文字符串截取无乱码的方法

可使用mb_substr,但是需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

转载于:https://www.cnblogs.com/ghjbk/p/6673199.html

你可能感兴趣的文章
Ring 0 Inline Hook
查看>>
Linux man C++ 库函数
查看>>
PE结构对照表
查看>>
复杂性渐近阶的重要性
查看>>
Rectangle and Square(判断正方形、矩形)
查看>>
js数组创建两种方法
查看>>
IOS自得其乐系列(一)-------------------加载动态图片
查看>>
Function Spec
查看>>
关于我 Jake Lin
查看>>
hue简单介绍
查看>>
现代服务业是什么?
查看>>
java学习笔记十——堆和栈的理解
查看>>
css遮罩蒙版效果 分栏效果
查看>>
rule.xml属性概念
查看>>
JDBC学习笔记
查看>>
css坑了我一下下之line-height
查看>>
ubuntu 16.04 u盘挂载以及卸载
查看>>
python 集合并集
查看>>
CSS样式书写顺序
查看>>
java解决跨域
查看>>