PHP基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)php

/ / 2019-08-08   阅读:2496
PHP基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)...
冒泡排序:
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;
}

我要评论

昵称:
验证码:

最新评论

共0条 共0页 10条/页 首页 上一页 下一页 尾页
意见反馈