常用php算法
一、冒泡排序
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() 函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多
个值相同,它将对下一个数组进行排序。
最新文章
- iOS版打地鼠游戏源码
- CentOS6.7安装RabbitMQ3.6.5
- 【转】CSS:table-cell详解
- c# CLI托管工程开启调试c++库工程代码
- CSS盒子模型的理解
- AngularJs angular.bind、angular.bootstrap、angular.copy
- CSSOM之getComputedStyle,currentStyle,getPropertyValue,getAttribute
- linux删除文件未释放空间问题处理
- java基础知识回顾之---java String final类普通方法
- <;转>;Python3.x和Python2.x的区别介绍
- C#使用Thrift简介,C#客户端和Java服务端相互交互
- JVM、GC与HashMap
- 百度搜索效果(jsonp法)
- 训练 smallcorgi/Faster-RCNN_TF 模型(附ImageNet model百度云下载地址)
- 新建Maven项目建成后本应该有的src/main/java和src/test/java目录并没有出现:
- WPF GridLinesVisibility属性
- JavaScript--事件入门(24)
- C++中三种创建对象的方法【转】
- MSDN Webcast 跟我一起从零开始学WCF系列课程
- Mybatis框架Day01(上)
热门文章
- 利用aspose-words直接将Word转化为图片
- Vue-Router的简单使用
- [模板][快速排序&;归并排序]
- CF Round #576 (Div. 2) Matching vs Independent Set
- Atom 输入时按 Tab 快捷键提示怎么取消?
- join的源码
- 移动开发与PC开发区别
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)B Binary Encoding
- md5sum c实现
- reduce、map、zip、filter使用记录