冒泡排序:
function bubbleSort($array){ $len=count($array); //该层循环控制 需要冒泡的轮数 for($i=1;$i<$len;$i++){ //该层循环用来控制每轮 冒出一个数 需要比较的次数 for($k=0;$k<$len-$i;$k++){ if($array[$k]>$array[$k+1]){ $tmp=$array[$k+1]; $array[$k+1]=$array[$k]; $array[$k]=$tmp; } } } return $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); }
选择排序:
function selectSort($array) { //双重循环完成,外层控制轮数,内层控制比较次数 $len=count($array); for($i=0; $i<$len-1; $i++) { //先假设最小的值的位置 $p = $i; for($j=$i+1; $j<$len; $j++) { //$array[$p] 是当前已知的最小值 if($array[$p] > $array[$j]) { //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。 $p = $j; } } //已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。 if($p != $i) { $tmp = $array[$p]; $array[$p] = $array[$i]; $array[$i] = $tmp; } } return $array; //返回最终结果 }
插入排序:
function insertSort($array) { $len=count($array); for($i=1, $i<$len; $i++) { $tmp = $array[$i]; //内层循环控制,比较并插入 for($j=$i-1;$j>=0;$j--) { if($tmp < $array[$j]) { //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换 $array[$j+1] = $array[$j]; $array[$j] = $tmp; } else { //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。 break; } } } return $array; }
二叉树(二分法)排序:
/** * 递归方法实现二分查找法. * @param Array数组 * @param low 数组第一位置 * @param high 最高 * @param k 要查找的值. * @return 返回值. */ function binSearch($array, $low, $high, $k){ if ($low <= $high){ $mid = intval(($low+$high)/2); if ($array[$mid] == $k){ return $mid; }elseif ($k < $array[$mid]){ return binSearch($array, $low, $mid-1, $k); }else{ return binSearch($array, $mid+1, $high, $k); } } return -1; }