最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

php需要学算法吗

来源:懂视网 责编:小采 时间:2020-11-27 14:19:20
文档

php需要学算法吗

php需要学算法吗:php需要学算法吗需要学,现在php不管是学习还是使用中碰到的问题基本都是函数方面的,很少接触到数据结构和算法之类的,但是我们要知道程序=数据结构+算法,可见算法对程序有多重要。要往高级走的话算法和数据结构是必会的,但不是用PHP去实现,因为PHP的
推荐度:
导读php需要学算法吗:php需要学算法吗需要学,现在php不管是学习还是使用中碰到的问题基本都是函数方面的,很少接触到数据结构和算法之类的,但是我们要知道程序=数据结构+算法,可见算法对程序有多重要。要往高级走的话算法和数据结构是必会的,但不是用PHP去实现,因为PHP的

php需要学算法吗

需要学,现在php不管是学习还是使用中碰到的问题基本都是函数方面的,很少接触到数据结构和算法之类的,但是我们要知道程序=数据结构+算法,可见算法对程序有多重要。

要往高级走的话算法和数据结构是必会的,但不是用PHP去实现,因为PHP的运行效率太低了,用来完成算法级别的东西一般都需要大量的循环,所以数学问题及算法的实现在PHP中标准的做法应该是做成C扩展,就是说算法都要用C去实现,并且学会PHP的C扩展开发。

基本算法:

冒泡排序

//逐行对比,满足条件则交换
function bubbleSort($arrData,$sort = 'desc')
{
 if(empty($arrData)) return $arrData;
 //默认有序
 $isSorted = true;
 $nCount = count($arrData);
 for($i = 0; $i < $nCount; $i++) {
 //对比次数随着循环逐渐减少,因为后面的数据已经处理为有序
 for($j = 0; $j < ($nCount - $i - 1); $j++) {
 //执行判断
 $isChange = $sort == 'desc' ? $arrData[$j] < $arrData[$j+1] : $arrData[$j] > $arrData[$j+1];
 if($isChange) {
 //首次对比,判断是否有序
 $isSorted = false;
 $temp = $arrData[$j];
 $arrData[$j] = $arrData[$j+1];
 $arrData[$j+1] = $temp;
 }
 }
 if($isSorted) break;
 }
 return $arrData;
}

快速排序

//选取一个标准,和其他数据对比后将数据分为两批,递归执行后合并
function quickSort(&$arr, $sort = 'asc'){
 //检查数据,多于一个数据才执行
 $nCount = count($arr);
 if($nCount > 1) {
 //选取标准(第一个数据)
 $nStandard = $arr[0];
 $arrLeftData = [];
 $arrRightData = [];
 //遍历,注意这里从1开始比较
 for($i = 1; $i < $nCount; $i++) {
 if($sort == 'desc') {
 $arr[$i] > $nStandard ? $arrLeftData[] = $arr[$i] : $arrRightData[] = $arr[$i];
 } else {
 $arr[$i] > $nStandard ? $arrRightData[] = $arr[$i] : $arrLeftData[] = $arr[$i];
 }
 }
 $arr = array_merge($this->quickSort($arrLeftData, $sort), array($nStandard), $this->quickSort($arrRightData, $sort));
 }
 return $arr;
}

二分查找

//假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;
//若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止
function binSearch($toSearch,$arr)
{
 //确定当前的检索范围
 $nCount = count($arr);
 //低位键,初始为0
 $nLowNum = 0;
 //高位键,初始为末尾 
 $nHighNum = $nCount - 1;
 while($nLowNum <= $nHighNum) {
 //选定大概中间键
 $nMiddleNum = intval(($nHighNum + $nLowNum)/2);
 if($arr[$nMiddleNum] > $toSearch) {
 //比检索值大
 $nHighNum = $nMiddleNum - 1;
 } elseif ($arr[$nMiddleNum] < $toSearch) {
 //比检索值小
 $nLowNum = $nMiddleNum + 1;
 } else {
 return $nMiddleNum;
 }
 }
 return false;
}

顺序查找

function seqSearch($arr,$toSearch)
{
 $nCount = count($arr);
 for ($i=0; $i < $nCount; $i++) {
 if ($arr[$i] == $toSearch) {
 return $i;
 }
 }
 return -1;
}

选择排序

//在第一次循环中,假设第一个数是最小的;然后跟第二个数比较,一直比到最后,找出最小值,然后把最小值跟第一个数的位置互换;
//再进行下一次循环,找出最小值跟第二个位置的数互换;一直循环数组的个数减去1次;数组就成了有序的了 
function selectSort($arr)
{
 $nCount = count($arr);
 //遍历取得需要排序的数
 for($i = 0; $i < $nCount; $i++) {
 //选择需要比较的数,从$i开始到结束
 for($j = $i + 1; $j < $nCount; $j++) {
 //比较
 if($arr[$j] < $arr[$i]) {
 $temp = $arr[$i];
 $arr[$i] = $arr[$j];
 $arr[$j] = $temp;
 }
 }
 }
 return $arr; 
}

更多PHP相关知识,请访问PHP中文网!

文档

php需要学算法吗

php需要学算法吗:php需要学算法吗需要学,现在php不管是学习还是使用中碰到的问题基本都是函数方面的,很少接触到数据结构和算法之类的,但是我们要知道程序=数据结构+算法,可见算法对程序有多重要。要往高级走的话算法和数据结构是必会的,但不是用PHP去实现,因为PHP的
推荐度:
标签: 学习 php 需要学习
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top