目录
/********************************** 打乱次序 **********************************/
/********************************** 冒泡算法 **********************************/
/********************************** 快速排序算法 **********************************/
/********************************** 插入排序 **********************************/
/********************************** 99乘法算法 **********************************/
/********************************** 文件遍历算法 **********************************/
/********************************** 递归算法 **********************************/
/********************************** 素数算法 **********************************/
/********************************** 二分查找 **********************************/
/********************************** 打乱次序 **********************************/
//对索引数组对key进行随机读取重新赋值到新数组
$arr = [0,1,2,3,4,5,6,7,8,9];
function shu_ffle($arr) {
$num = count($arr);
for ($i=0;$i<$num;$i++){
//随机获取一个key
$j = rand(0,$num-1);
list($arr[$i],$arr[$j]) = [ $arr[$j], $arr[$i]];
}
return $arr;
}
//print_r( shu_ffle($arr) );
/********************************** 冒泡算法 **********************************/
//第一次循环数组本身 通过第2个变量,对变量进行比较排序
$arr = array('5','2','0','1','3','1','4');
//var_dump( count($arr) );
function BubbleSort(array $arr){
for ($i=0 ; $i <count($arr) ; $i++) {
//设置一个空变量
$data = '';
//第二次循环数组的部分(count($arr)-1 数组长度-1)
//设数组长 7位,第一次比较时$i=0 第一位数字5 $arr[$i] 和第二位的数字2 比较 $arr[$j+1]
for ($j=$i ; $j < count($arr)-1 ; $j++) {
//相邻的值对比大小,前值大于后值时,对前后值进行互换
if ($arr[$i] > $arr[$j+1]) {
$data = $arr[$i]; //存储前一位原值
$arr[$i] = $arr[$j+1];//前值赋后值
$arr[$j+1] = $data; //后值赋前值
}
}
}
return $arr;
}
//print_r(BubbleSort($arr));
/********************************** 快速排序算法 **********************************/
function quickSort( $needSort ){
//判断是否排序
$count = count( $needSort);
if($count <= 1 ) {
return $needSort;
}
//假设数组的中间值是第一位
$centre = $needSort[0];
$left = $right = [];
//第一位被取做中间值时,要在第二位开始循环
for($i=1; $i<$count; $i++){
//当前值在小于等于中间值时放入左边数组
if($needSort[$i] <= $centre){
$left[] = $needSort[$i];
}else{
$right[] = $needSort[$i];
}
}
//对左右数组再次快速排序
$left = quickSort( $left );
$right = quickSort( $right );
//将左 中 右 进行合并返回排序结果
return array_merge( $left, array( $centre ), $right);
}
$needSort = [6,-1,0,11,22,3,1,4,6,2,7,9,8,5,3];
//var_dump( quickSort($needSort) );
/********************************** 插入排序 **********************************/
//在一组排好序的数组中插入新元素,并保持好顺序
//核心是冒泡排序的思想,将插入元素对比时进行键值互换
function insertSort( $sortArr , $push){
$arr = [];$tmp = '';
for($i=0;$i<count($sortArr);$i++){
//复制每一个值到新数组
$arr[$i] = $sortArr[$i];
//如果小于当前值 插入
if( $push < $sortArr[$i]){
$tmp = $sortArr[$i]; //收集当前值
$arr[$i] = $push; //当前值改变为插入值
$arr[$i+1] = $tmp; //当前值向后移动一位
$push = $tmp; //新的插入值等于当前值
}else{
if( $i == count($sortArr)-1){ //等于最大轮次数时在尾部插入
$arr[$i+1] = $push;
}
}
}
return $arr;
}
$arr = [1,7,9,11,14];
var_dump( insertSort( $arr , 9));
/********************************** 99乘法算法 **********************************/
/*
1*1=1
1*2=2 2*2=1
...
*/
function multiplication($multiplier = 9){
for($i=1; $i<=$multiplier; $i++ ){
echo '<br/>';
for($k=1; $k<=$i; $k++){
echo "$k × $i = " . $i * $k .' ';
}
echo '<br/>';
}
}
//multiplication(9);
/********************************** 文件遍历算法 **********************************/
function filesEach( $dir ){
//判断文件夹正确
if( !is_dir($dir) ) return false;
//获取文件夹内容列表
$files = array();
if($handle = opendir($dir)) {
while(($file = readdir($handle)) !== false) {
if($file != ".." && $file != ".") { //排除根目录;
if(is_dir($dir."/".$file)) { //如果是子文件夹,就进行递归
$files[$file] = filesEach($dir."/".$file);
} else { //不然就将文件的名字存入数组;
$files[] = $file;
}
}
}
closedir($handle);
}
//返回遍历结果
return $files;
}
$dir = 'D:\Drivers\Wlan';// 不能打开不在ini open_basedir选项 配置中的目录 也会返回false
$dir = 'D:\WWW\my_work\19复习';
//var_dump(filesEach( $dir ));
/********************************** 递归算法 **********************************/
//递归核心为处理中自己调用自己
function recursion( $num ){
$num++;
if( $num < 10 ){
return recursion( $num );
}
return $num;
}
//echo recursion(1);
/********************************** 素数算法 **********************************/
//素数只能被1 和自己整除
function primeNumber( $max ){
$date = array();
for ($i = 1; $i<=$max; $i++){
$cishu = 0;
//循环被除数的整数项,能被整除时累计一次次数,不等于2次的就不是素数
for($k=1; $k<=$i; $k++ ){
if($i % $k == 0){
$cishu ++;
}
if( $cishu > 2 ){
break;
}
}
if($cishu == 2){
$date[]=$i;
}
}
return $date;
}
//var_dump( primeNumber( 100 ) );
/********************************** 二分查找 **********************************/
//在有序的数列中通过中位数快速查找目标的方法(对半查找法)
$arr = [-2,-1,0,1,2,3,4,5,6,7,8,9];
function twoSearch( &$array , $search ,$index ,$lastIndex ){
//根据起始位$index 和结束位 $lastIndex置进行中位数计算 $median向上取整
$median = intval( ($index + $lastIndex) / 2 );
//当查询到时返回$median
if( $array[$median] == $search ){
return $median;
//当中位数小于目标时,再次查找数组的后半段,及中位数为起始位
}elseif( $array[$median] < $search ){
return twoSearch( $array,$search,$median,$lastIndex );
//反过来中位数大于目标时,再次查找数组前半段,及中位数成为结束位
}elseif( $array[$median] > $search ){
return twoSearch( $array,$search,$index,$median );
}
return false;
}
//当搜索目标不在数列中时,会产生递归循环,加以过滤(不大于最大值,不小于最小值)
//var_dump( '数组key : ' . twoSearch( $arr , 8,0 , count($arr) ) );