使用PHP描述顺序查找和二分查找(也叫做折半查找)算法

Posted 进阶全栈开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用PHP描述顺序查找和二分查找(也叫做折半查找)算法相关的知识,希望对你有一定的参考价值。

在PHP中error_reporting这个函数有什么作用?

设置 php 的报错级别并返回当前级别。


请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。

if(isset($_POST['action']) && $_POST['action']==’submitted’){

 $email=$_POST['email'];

 if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+){1,3}$/”,$email)){

  echo “电子邮件检测失败”;

 }else{

  echo “电子邮件检测成功”;

 }

}


使用PHP描述快速排序算法,对象可以是一个数组?

原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤为:


(1)从数列中挑出一个元素,称该元素为“基准”。


(2)扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排在基准后面。


(3)通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。


//快速排序(数组排序)

function QuickSort($arr){

 $num = count($arr);

 $l=$r=0;

 for($i=1;$i<$num;$i++){

  if($arr[$i] < $arr[0]){

   $left[] = $arr[$i];

   $l++;

  }else{

   $right[] = $arr[$i];

   $r++;

  }

 }

 if($l > 1){

  $left = QuickSort($left);

 }

 $new_arr = $left;

 $new_arr[] = $arr[0];

 if($r > 1){

  $right = QuickSort($right);

 }

 for($i=0;$i<$r;$i++){

  $new_arr[] = $right[$i];

 }

 return $new_arr;

}


使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组

//二分查找(数组里查找某个元素)

function bin_sch($array, $low, $high, $k){

 if ($low <= $high){

  $mid = intval(($low+$high)/2);

  if ($array[$mid] == $k){

   return $mid;

  }elseif ($k < $array[$mid]){

   return bin_sch($array, $low, $mid-1, $k);

  }else{

   return bin_sch($array, $mid+1, $high, $k);

  }

 }

 return -1;

}

//顺序查找(数组里查找某个元素)

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;

 }

}


写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数(array_multisort())


//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序

function array_sort($arr, $keys, $order=0) {

 if (!is_array($arr)) {

  return false;

 }

 $keysvalue = array();

 foreach($arr as $key => $val) {

  $keysvalue[$key] = $val[$keys];

 }

 if($order == 0){

  asort($keysvalue);

 }else {

  arsort($keysvalue);

 }

 reset($keysvalue);

 foreach($keysvalue as $key => $vals) {

  $keysort[$key] = $key;

 }

 $new_array = array();

 foreach($keysort as $key => $val) {

  $new_array[$key] = $arr[$val];

 }

 return $new_array;

}


请以空格作为间隔,拆分字符串’Apple Orange Banana Strawberry’,组成数组$fruit,* 数组中所有元素都用小写字母,并按照字母先后次序排序。

class sort { 

 private $str; 

 public function __construct($str) { 

  $this->str=strtolower($str); 

 } 

 private function explodes() { 

  if(empty($this->str)) return array(); 

  $arr=explode(" ",$this->str); 

  return is_array($arr)?$arr:array($arr); 

 } 

 public function sort() { 

  $explode=$this->explodes(); 

  sort($explode); 

  return $explode; 

 } 

$str='Apple Orange Banana Strawberry'; 

$sortob=new sort($str); 

var_dump($sortob->sort());


对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则 表达式验证,对于不符合要求的$string返回出错信息

class regx { 

 public static function check($str) { 

 if(preg_match("/^([1-9,])+$/",$str)) { 

  return true; 

 } 

 return false; 

 } 

$str="12345,6"; 

if(regx::check($str)) { 

echo "suc"; 

} else { 

echo "fail"; 

}


请写一段程序,在服务器创建一个文件fruit.dat,将试题3中得到的数组写入到改文件中,然后写一段程序从文件中读取并还原数组@author zhuwenqiong


class sort { 

 private $str; 

 public function __construct($str) { 

  $this->str=strtolower($str); 

 } 

 private function explodes(){ 

  if(empty($this->str)) return array(); 

  $arr=explode(" ",$this->str); 

  return is_array($arr)?$arr:array($arr); 

 } 

 public function sort() { 

  $explode=$this->explodes(); 

  sort($explode); 

  return $explode; 

 } 

class file { 

 private $sort=null; 

 private $filepath; 

 public function __construct($arrobj,$path) { 

  $this->sort=$arrobj; 

  $this->filepath=$path; 

 } 

 private function getresource($filename,$mode) { 

  return fopen($this->filepath.$filename,$mode); 

 } 

 private function closeresource($resource) { 

  fclose($resource); 

 } 

 public function savefile($filename) { 

  $arr=$this->sort->sort(); 

  $fopen=$this->getresource($filename,"a+"); 

  if(!$fopen){ 

   echo "文件打开失败!";

   exit; 

  } 

  var_dump($arr); 

  foreach($arr as $key=>$value) { 

   fwrite($fopen,$value."\n"); 

  } 

  $this->closeresource($fopen); 

 } 

 public function readfile($filename) { 

  $this->savefile($filename); 

  $fopen=$this->getresource($filename,"r"); 

  if(!$fopen){ 

   echo "文件打开失败!";exit; 

  } 

  $arr=array(); 

  while(!feof($fopen)) { 

   $get=fgets($fopen); 

   if(!empty($get)) 

    $arr[]=str_replace("\n","",$get); 

  } 

  $this->closeresource($fopen); 

 return $arr; 

 } 

$file=new file(new sort('Apple Orange Banana Strawberry'),"E:\\"); 

$arr=$file->readfile("fruit.dat"); 

var_dump($arr); 


单例模式,创建mysqli数据库链接的单例对象

class Db { 

 private static $instance; 

 public $handle; 

 Private function __construct($host,$username,$password,$dbname) { 

  $this->handle=NULL; 

  $this->getcon($host,$username,$password,$dbname); 

 } 

 public static function getBb() { 

  self::$instance=new Db(); 

  return self::$instance; 

 } 

 private function getcon($host,$username,$password,$dbname) { 

  if($this->handle!=NULL){ 

   return true; 

  } 

  $this->handle=mysqli_connect($host,$username,$password,$dbname); 

 } 

}


windows平台, Apache Http Server启动失败, 排错思路是什么?

检查apache使用的80端口是否被占用,如果被占用,先停止占用80端口的服务,然后启动apache服务器。


怎么找到数据库的配置文件路径?

在数据库安装目录下,my.ini



写出Smarty模板引擎中你最常用的关键词

Assign Display Foreach


Section Loop Item


$smarty Now Const get


增加一个字段性别sex,写出修改语句

Alert table user add sex enum(’0′,’1′);


查询出年龄介于20岁到30岁之间的用户

Select * from user where age>20 and age<30


如果是一个Web频繁访问的查询,上题的查询如何优化?

可对where后面的字段 age 建立索引,也可对语句建立存储过程。

以上是关于使用PHP描述顺序查找和二分查找(也叫做折半查找)算法的主要内容,如果未能解决你的问题,请参考以下文章

php算法整合

php查找之二分查找

PHP 二分查找算法

PHP 二分查找算法

python实现二分查找(折半查找)算法

二分查找(折半查找)