冒泡算法排序
基本思想:
对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换。这样比较小(大)的数值就将逐渐从后面向前面移动。
public function bubbleSort()
{
$arr = [-1, 3, 44, 38, 5, 47, 15, 36];
for($i = 0; $i < count($arr) - 1; $i++)
{
for($j = 0; $j < count($arr) - 1 - $i; $j++)
{
if($arr[$j] > $arr[$j + 1])
{
//交换位置
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
}
}
}
}
快速排序
基本思想:
在数组中挑出一个元素(一般为第一个)作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,将小的数组和大的数组通过递归再次排序,当数组变成最小数组,所有数组再次合并组成新的数组。
public function quickSort($arr)
{
$length = count($arr);
if($length <= 1) {
return $arr;
}
$first_num = $arr[0];//选择一个标尺 选择第一个元素
$left_array = array();//小于标尺的
$right_array = array();//大于标尺的
for($i=1; $i<$length; $i++)
{
if($first_num > $arr[$i]) {
$left_array[] = $arr[$i];
} else {
$right_array[] = $arr[$i];
}
}
$left_array = quickSort($left_array);
$right_array = quickSort($right_array);
return array_merge($left_array, array($first_num), $right_array);
}
二分查找(必须是有序的)
基本思想:
假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。(数据量大的时候使用)
public function binSearch($arr,$low,$high,$k)
{
if($low <= $high) {
$mid = intval(($low + $high)/2);
if($arr[$mid] == $k){
return $mid;
} else if ($k < $arr[$mid]) {
return binSearch($arr,$low,$mid-1,$k);
}else {
return binSearch($arr,$mid+1,$high,$k);
}
}
return -1;
}
遍历文件夹
public function eachDir($dir)
{
$files = [];
if($handle = opendir($dir))
{
while (($file = readdir($handle)) !== false)
{
if($file != '..' && $file != '.') {
if(is_dir($dir."/".$file)) {
$files[$file] = eachDir($dir."/".$file);
} else {
$files[] = $file;
}
}
}
closedir($handle);
}
return $files;
}
获取url扩展名
public function getExt($url)
{
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode('.', $file);
return $ext[count($ext)-1];
}