HuangXiaoChuan 2015-10-13
面试中经常被问到会什么算法,这里整合一些常见的算法及它们的实现原理.下面的例子都是经过测试可用的,如果有什么问题请告知!!
本人小白,如果有更好的实现方式,敬请赐教,感激不尽!!!!
冒泡排序,快速排序,选择排序,二分法查找,快速查找
/** * 冒泡排序 * 相邻2数比较,小的在前,大的在后 * 数组有几个元素,就要比较几轮 $i * 每轮需要比较的次数为,数组元素个数-已比较的次数 $j * @param array $array 要操作的数组 * @return array $array 返回的数组 */ function bubbleSort($array) { $cnt = count($array); for($i = 0; $i < $cnt ; $i++){ for($j = 0 ; $j < ($cnt-$i-1) ; $j++){ if($array[$j] > $array[$j+1]){ $temp = $array[$j]; $array[$j] = $array[$j+1]; $array[$j+1] = $temp; } } } return $array; } /** * 快速排序 * 递归实现 * 获取数组第一个数,循环使后面的数与其比较, * 比其小的放在一个数组中,比其大的放在一个数组中 * 将2个数组递归调用,直到最终数组元素小于等于1时,没有可以比较的元素 * 通过array_merge函数,将比较的数组按大小顺序合并然后一层一层的return出去,最终实现从小到大排序 * @param array $array 要操作的数组 * @return array $array 返回的数组 */ function quickSort($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 = quickSort($left_arr); $right_arr = quickSort($right_arr); return array_merge($left_arr,array($key),$right_arr); }