本书的 GitHub 地址: https://github.com/todayqq/PH...
算法能够说是大厂的必考题,对于算法,必定要理解其中的精髓、原理。php
冒泡排序的原理:一组数据,比较相邻数据的大小,将值小数据在前面,值大的数据放在后面。html
function bubble_sort($arr) { $count = count($arr); if (0 == $count) { return false; } for($i = 0; $i < $count; $i++){ for($j = 0; $j< $count-1-$i; $j++){ if($arr[$j] > $arr[$j+1]){ $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } } } return $arr; }
这样的一个数组 array(6, 3, 8, 2, 9, 1)
,排序过程是怎样的?细节问题不在过多论述,有兴趣能够从扩展阅读中寻找答案。git
快速排序是对冒泡排序的一种改进。github
实现思想是:经过一趟排序将待排记录分割成独立的两部分,其中一部分的关键字均比另外一部分记录的关键字小,则可分别对这两部分记录继续进行快速排序,整个排序过程能够递归进行,以达到整个序列有序的目的。面试
简单来讲就是:找到当前数组中的任意一个元素(通常选择第一个元素),做为标的,新建两个空数组,遍历整个数组元素,若是遍历到的元素比当前的元素要小,那么就放到左边的数组,不然放到右面的数组,而后再对新数组进行一样的操做。算法
function quick_sort($arr) { $count = count($arr); if(1 >= $count) { return arr; } $base_num = $arr[0]; //选择标的 $left_array = array();//小于标的 $right_array = array();//大于标的 for($i = 1; $i < $count; $i++) { if($base_num > $arr[$i]) { $left_array[] = $arr[$i]; } else { $right_array[] = $arr[$i]; } } //再分别对左边和右边的数组,进行相同的排序处理方式 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //最终合并 return array_merge($left_array, array($base_num), $right_array); }
实现思想:将表中间位置记录的关键字与查找关键字比较,若是二者相等,则查找成功;不然利用中间位置记录将表分红前、后两个子表,若是中间位置记 录的关键字大于查找关键字,则进一步查找前一子表,不然进一步查找后一子表。数组
function binSearch($arr, $target){ $height = count($arr)-1; $low = 0; while($low <= $height){ $mid = floor(($low+$height)/2);//获取中间数 //两值相等,返回 if($arr[$mid] == $target){ return $mid; //元素比目标大,查找左部 } elseif ($arr[$mid] < $target){ $low = $mid + 1; //元素比目标小,查找右部 } elseif ($arr[$mid] > $target){ $height = $mid - 1; } } return "查找失败"; }