PHP常见的排序查找算法

本文总结了常用的php排序算法和查找算法,对算法的设计有很好的参考价值,现供大家参考:


< PHP

* PHP中最常用的四种排序方法和两种查找方法
*下面的排序方法都经过测试
*作者单位:soulence
*日期:2015 06 20
* /

冒泡排序法
功能的冒泡排序($ ARR){
这是中间变量。
$ = 0;
我们需要按升序排列数组。
外循环
美元=假;优化效率会很高,一般来说足够了。
为($我= 0;$我<计数($ ARR)1美元;i++){

为(J = 0美元;J <计数($ ARR)- 1美元美元我;j++){
前/后号码指令数与交换数之比
如果($ ARR { $ J } > $ ARR { $ J + 1 }){
美元美元美元临时= { }度{J}.;
ARR { } = J美元美元美元美元ARR { J + 1 };
$ ARR { $ J + 1 } = $温度;
$标志=真;
}
}
如果(!$标志){
是否为订单
打破;
}
$标志= false;
}
}

选择排序方法的效率要高于冒泡排序法。
功能选择排序($ ARR){
$ = 0;
为($我= 0;$我<计数($ ARR)1美元;i++){
I是最小假设数。
美元美元美元minVal = ARR {我};
我想十进制下标/记录
美元美元极小指标=我;
为(J =我+ 1;J <计数($ ARR);$ J++){
我们认为这是最小值,不是最不重要的。
如果($ minVal >美元ARR { $ J }){
$minVal=$arr{$j};
$极小指标= J;
}
}
最后, / Exchange
温度=美元美元美元ARR {我};
ARR {我} =美元美元美元美元极小指标ARR { };
ARR { } =美元美元美元极小指标温度;
}
}

插入排序(小到大的顺序)和效率高于选择排序
函数插入排序($ ARR){
默认的第一个下标0这个数字已经被订购了
为($我= 1;$我<计数($ ARR);$ i++){
/ / insertval美元是要插入的数
insertval美元=美元ARR { $我};
/ /准备美元inserindex谁。
inserindex美元= $ I-1;
如果满足这个条件,我们就找不到合适的位置。
而(inserindex美元美元美元美元insertval << ARR { inserindex } > = 0){
在同一时间,移位的数量为
$ ARR { $ inserindex + 1 } = { } ARR inserindex美元美元;
inserindex美元--;
}
(然后插入至inserindex / /找到合适的位置)
inserindex + 1美元美元的ARR { } = $ insertval;
}
}


快速排序我没有意识到第一种方式。
功能快速排序(美元左右美元美元,ARR){
美元=左;
美元=右;
支点= {(美元美元美元美元ARR左+右) / 2 };
当($ l $ r){
而($ ARR { $ L } < $枢轴){
$ + +;
}
而($ ARR { $ R } >为支点){
美元—;
}
如果($ = = $ r){
打破;
}

美元美元美元升温度= ARR { };
{ } = L ARR美元美元美元美元ARR {红};
ARR { } = R美元美元美元的温度;
如果($ ARR { $ L } = = $枢轴){
——R;
}
如果($ ARR { $ R } = = $枢轴){
++;
}
}
如果($ = = $ r){
$ + +;
美元—;
}
如果($左< r)快速排序(美元美元美元左R,ARR);
如果($权> $ L)快速排序(l美元美元美元,右,ARR);
}


*快速排序方法的第二个实现是由它们自己实现的。
* PHP快速排序方法
* $阶ASC从小到大降序和小默认是ASC
* $顺序升序-降序只要根据ASC排序的值是随机的有价值
* /
功能quicksort2($ ARR,$order = 'asc)
{
如果(计数($ ARR)< = 1)
返回的数组;

arr_left美元=美元arr_right =阵();

美元美元的ARR值= { 0 };unset($ ARR { 0 });

Foreach ($arr as $v) {
如果(strtolower($阶)= = 'desc){
如果(五美元$瓦尔)
arr_right美元{ } = $ V;
其他的
arr_left美元{ } = $ V;
其他{ }
如果($ $ $瓦尔)
arr_right美元{ } = $ V;
其他的
arr_left美元{ } = $ V;
}
}

arr_left美元= quicksort(arr_left美元,美元的订单);
$arr_right = quickSort ($arr_right, $order);

返回array_merge($ arr_left,阵列($ Val),arr_right美元);
}


下面是查找
$ ARR =阵列(4690900,0,- 1);
这是根据查询的顺序/。
搜索功能($ ARR,findval美元){
$标志= false;
为($我= 0;$我<计数($ ARR);$ i++){
如果($ findval = = $ ARR { $我}){
,,下标;
$标志=真;
查询时间,如果不是中断时间;
}
}
如果(!$标志){
没有这个号码;
}
}

调用/二次搜索
$ ARR =阵列(09090099990); / /注必须有序
binaryswarch($ ARR,计数($ ARR)90,0角度,1);

两个搜索函数,这是找到数组必须有序的前提。
功能二(ARR findval美元,美元,美元leftindex美元,rightindex){
rightindex美元美元 / / < leftindex建立如果没有这个数的条件下,然后退出
如果($ rightindex << leftindex美元){
找不到号码。
返回;
}
首先,如果有一个小数,四到五个家庭,中间数量是整数。
middleindex美元=圆((($ rightindex + $ leftindex) / 2);
如果多于看后面/
如果(findval美元美元美元middleindex } { > ARR){
二(ARR findval美元,美元,美元middleindex + 1,rightindex美元);
如果小于中间数,就可以找到前面。
} else if($ findval < $ ARR { $ middleindex }){
二(ARR findval美元,美元,美元leftindex美元,middleindex-1);
其他{ }
回声找到这个号码。下标为middleindex ;
}
}
>


希望本文中介绍的排序算法和查找算法实例对PHP程序设计有一定的帮助。