标签:desc asc neu key return 其他 order multi esc
一、冒泡排序
function bubble($array)
{
$cnt = count($array);
if($cnt <= 0) return $array;
for($i =1;$i < $cnt;$i++)
{
for($j = 0;$j < $cnt-$i;$j ++)
{
if($array[$j] > $array[$j+1])
{
$tmp = $array[$j];
$array[$j] = $array[$j+1];
$array[$j+1] = $tmp;
}
}
}
return $array;
}
二、快速排序
function quick_sort($a)
{
// 判断是否需要运行,因下面已拿出一个中间值,这里<=1 if (count($a) <= 1) { return $a; } $middle = $a[0]; // 中间值 $left = array(); // 接收小于中间值 $right = array();// 接收大于中间值 // 循环比较 for ($i=1; $i < count($a); $i++) { if ($middle < $a[$i]) { // 大于中间值 $right[] = $a[$i]; } else { // 小于中间值 $left[] = $a[$i]; } } // 递归排序划分好的2边 $left = quick_sort($left); $right = quick_sort($right); // 合并排序后的数据,别忘了合并中间值 return array_merge($left, array($middle), $right); }
三、选择排序
/** 2层循环
* 第一层逐个获取数组的值 $array[$i]
* 第二次遍历整个数组与$array[$i]比较($j=$i+1已经比较的,不再比较,减少比较次数)
* 如果比$array[$i]小,就交换位置
* 这样一轮下来就可以得到数组中最小值
* 以此内推整个外层循环下来就数组从小到大排序了
* @param array $array 要比较的数组
* @return array $array 从小到大排序后的数组
*/
function selectSort($array){
$cnt = count($array);
for($i=0;$i<$cnt;$i++){
for($j=($i+1);$j<$cnt;$j++){
if($array[$i]>$array[$j]){
$tmp = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $tmp;
}
}
}
四、二分查找(传入数组必须是从小到大已排序好的数组)只适用于有序表,且限于顺序存储结构
function binarySearch($arr,$val,$st,$et){
$m_ind
= floor(($st + $et) / 2)
;
$max_idx
=
count
(
$arr
)-1;
$min_idx
= 0;
if
(
$arr
[
$min_idx
]>
$val
||
$arr
[
$max_idx
]<
$val
|| (
$et
-
$st
==1 &&
$arr
[
$et
]!=
$val
&&
$arr
[
$st
]!=
$val
)){
return
-1;
}
if
(
$arr
[
$m_ind
]==
$val
){
return
$m_ind
;
}
else
if
(
$arr
[
$m_ind
] >
$val
){
$et
=
$m_ind
- 1;
return
binarySearch(
$arr
,
$val
,
$st
,
$et
);
}
else
{
$st
=
$m_ind
+ 1;
return
binarySearch(
$arr
,
$val
,
$st
,
$et
);
}
}
function query_search($array,$val)
{
foreach ($array as $k => $v)
{
if($v == $val)
{
return $k ;
}
}
return -1 ;
}
六、二维数组排序,能够具有通用性,可以调用php内置函数
<?php $data = array( array( ‘id‘ => 5698, ‘first_name‘ => ‘Bill‘, ‘last_name‘ => ‘Gates‘, ), array( ‘id‘ => 4767, ‘first_name‘ => ‘Steve‘, ‘last_name‘ => ‘Aobs‘, ), array( ‘id‘ => 3809, ‘first_name‘ => ‘Mark‘, ‘last_name‘ => ‘Zuckerberg‘, ) );
//$arr要进行排序的二维数组;$key是排序的健值,$order是排序规则,1是升序,0是降序
function array_sort($arr,$key,$order)
{
$columns = array_column($arr,$key);
$o = $order == 1 ? SORT_ASC:SORT_DESC;
array_multisort($columns,$o,$arr);
return $arr;
}
var_dump(array_sort($data,"id",1));
了解下以下两个函数:
1.array_column() 返回输入数组中某个单一列的值。
2.array_multisort() 函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多
个值相同,它将对下一个数组进行排序。
标签:desc asc neu key return 其他 order multi esc
原文地址:https://www.cnblogs.com/ivy-zheng/p/10925451.html