算法排序篇
约 429 字大约 1 分钟
2025-07-07
快速排序
function quick_sort($array) {
if (count($array) <= 1) return $array;
$array_count = count($array); # 数组数量
$key = $array[0]; # 对比值
$left_arr = array(); # 接收小于对比值的数
$right_arr = array(); # 接收大于对比值的数
for ($i=1; $i<$array_count; $i++){
if ($array[$i] <= $key){
$left_arr[] = $array[$i];
}else{
$right_arr[] = $array[$i];
}
}
$left_arr = quick_sort($left_arr);
$right_arr = quick_sort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
冒泡排序
$list = [2, 4, 1, 7, 9, 3];
$len = count($list);
for ($i = $len - 1; $i > 0; $i--) {
$flag = 1;
for ($j = 0; $j < $i; $j++) {
if ($list[$j] > $list[$j + 1]) {
$tmp = $list[$j];
$list[$j] = $list[$j + 1];
$list[$j + 1] = $tmp;
$flag = 0;
}
}
if($flag) break;
}
var_dump($list);
二分查找
//二分查找(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k < $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}else{
return bin_sch($array, $mid+1, $high, $k);
}
}
return -1;
}
顺序查找
function seq_sch($array, $n, $k){
$array[$n] = $k;
for($i=0; $i<$n; $i++){
if($array[$i]==$k){
break;
}
}
if ($i<$n){
return $i;
}else{
return -1;
}
}
插入排序
function insertSort($arr)
{
$count = count($arr);
for ($i = 1; $i < $count; $i++) {
$tmp = $arr[$i];
for ($j = $i - 1; $j >= 0; $j--) {
// 从小到大 【<】 从大到小 【>】
if ($tmp < $arr[$j]) {
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $tmp;
} else {
break;
}
}
}
return $arr;
}
选择排序
function selectSort($arr){
for ($i=1;$i<count($arr);$i++){
$p = $i;
for ($j = $i + 1; $j < count($arr);$j++){
if ($arr[$p] > $arr[$j]){
$p = $j;
}
}
if ($p != $i){
$tmp = $arr[$p];
$arr[$i] = $tmp;
$arr[$p] = $arr[$i];
}
}
return $arr;
}
写一个二维数组排序算法函数
/**
* 二维数组排序
* @param $arrays
* @param $sort_key
* @param $sort_order (SORT_DESC 降序;SORT_ASC 升序)
* @param $sort_type (请看官方文档 array_multisort 函数的说明)
* @return array|false
*/
function array_sort($arrays,$sort_key,$sort_order=SORT_DESC,$sort_type=SORT_NUMERIC ){
if(is_array($arrays)){
foreach ($arrays as $array){
if(is_array($array)){
$key_arrays[] = $array[$sort_key];
}else{
return false;
}
}
}else{
return false;
}
array_multisort($key_arrays,$sort_order,$sort_type,$arrays);
return $arrays;
}