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中文网其他相关文章!