<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素)
$array = [1,3,6,9,13,1,63,65,69,70,71,73,75,76,77,79,89];
$target = 73;//查找的数
$low = 0;
$high = count($array)-1;//数值长度
function bin_search($array, $low, $high, $target){
if ( $low <= $high){
$mid = intval(($low+$high)/2 );
if ($array[$mid] == $target){
return $mid;
}elseif ( $target < $array[$mid]){
return bin_search($array, $low, $mid-1, $target);
}else{
return bin_search($array, $mid+ 1, $high, $target);
}
}
return false;
}
$find = bin_search($array, $low, $high, $target);
var_dump($find);
//显示结果 12 //顺序查找(数组里查找某个元素) function seq_sch($array, $n, $k){ $array[$n] = $k; for($i=0; $i<$n; $i++){ if( $array[$i]==$k){ //找到相同的值就会终止循环 break; } } if($i<$n){ return $i; }else{ return -1; //没有匹配的数值 } }
$arr=[1,5,3,6,4,7,11,15,18];
$n =count($arr);
$k =6;
var_dump(seq_sch($arr,$n,$k));
结果: 3;
//线性表的删除(数组中实现) function delete_array_element($array , $i) { $len = count($array); for ($j= $i; $j<$len; $j ++){ $array[$j] = $array [$j+1]; //把需要删除的数的位置,开始,把后边的值覆盖到前面上来 } array_pop ($array); //清楚最后一个多余的字段 return $array ; }
$arr =[1,5,7,11];
$i =1;
var_dump(delete_array_element($arr,$i));
集合:[1,7,11];
//冒泡排序(数组排序) function bubble_sort( $array) { $count = count( $array); if ($count <= 0 ) return false; for($i=0 ; $i<$count; $i ++){//循环对比的轮数
for($j=$count-1 ;$j>$i; $j--){ //当前轮相邻元素循环对比
if($array[$j] < $array [$j-1]){ //如果前面的大于后面的
$tmp = $array[$j]; //交换
$array[$j] = $array[ $j-1];
$array[$j-1] = $tmp;
}
}
}
//逻辑: 选择一个参考数 return $array; }
$arr =[1,5,8,2,87,16];
var_dump(bubble_sort($arr));
$arr =[1,2,5,8,16,87];
//快速排序(数组排序) function quick_sort($array ) { if (count($array) <= 1) return $array; $key = $array [0]; $left_arr = array(); $right_arr = array(); for ($i= 1; $i<count($array );$i++){ if ($array[ $i]<= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i ]; } $left_arr = quick_sort($left_arr ); $right_arr = quick_sort( $right_arr); return array_merge($left_arr , array($key),$right_arr); }
//快速排序(数组排序) function quick_sort($array ) { if (count($array) <= 1) return $array; $key = $array [0]; //第一个值 $left_arr = array(); //左数组 $right_arr = array(); //右数组 for ($i= 1; $i<count($array );$i++){ if ($array[ $i]<= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i ]; } $left_arr = quick_sort($left_arr ); $right_arr = quick_sort( $right_arr); return array_merge($left_arr , array($key),$right_arr); } $arr =[1,5,3,7,55,34]; var_dump(quick_sort($arr)); $arr =[1,3,5,7,34,55];