Php中几个常用的排序算法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php
// 冒泡,从第一个开始往后比,再从第二个开始比较到倒数第二个
// 循环
function bubbleSort($numbers) {
    $count= count($numbers);
    if ($count <= 0) return false;
    for ($i = 0; $i < $count; $i++) {
        for ($j = 0; $j < $count- 1 - $i; $j++) {
            if ($numbers[$j] > $numbers[$j + 1]) {
                list($numbers[$j], $numbers[$j +1]) = [$numbers[$j + 1], $numbers[$j]];
            }
        }
    }
 
    return $numbers;
}
 
$num = array(20, 40, 60, 80, 30, 70, 90, 10, 50, 0);
var_dump(bubbleSort($num));
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php
// 快速,循环小的放左边,大的放右边,然后递归
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);
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
// 顺序查找,不知道有啥意义,明明可以用array_search($value, $array)或者in_array($search, $array, $type)
function query_search($val)
 {
  foreach ($this->array as $k => $v) {
   if($v == $val) {
    return $k;
   }
  }
return false;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<?php
// 二分查找
function binarySearch(&$arr,$low,$top,$target){
        if($low<=$top){
            $mid = floor(($low+$top)/2);
            if($arr[$mid]==$target){
                return $mid;
            }elseif($arr[$mid]<$target){
                return binarySearch($arr,$mid+1,$top,$target);
            }else{
                return binarySearch($arr,$low,$mid-1,$target);
            }
        }else{
            return -1;
        }
    }
$arr = array(1,3,9,23,54);
echo binarySearch($arr, 0, sizeof($arr), 9);