PHP实现几个排序和查找算法

PHP实现几个排序和查找算法

内容导读

收集整理的这篇技术教程文章主要介绍了PHP实现几个排序和查找算法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1718字,纯文字阅读大概需要3分钟

内容图文

冒泡排序,快速排序,二分查找,虽然简单,但是一段时间不用的话就很容易忘记,这里是小编找来的用PHP实现代码,分享给大家一起来学习一下。

排序

冒泡排序

每一次冒出一个最大的值

function bubbleSort($arr){

$count = count($arr);

if ($count == 0) return false;

for ($i = 0; $i < $count - 1; $i++) {



for ($k = 0; $k < $count - 1 - $i; $k++) {





if ($arr[$k] < $arr[$k + 1]) {







$tmp



 = $arr[$k];







$arr[$k]

 = $arr[$k + 1];







$arr[$k + 1] = $tmp;





}



}

}

return $arr;}

快速排序

选择一个值作为基准,比他小的放在左边,比他大的放在右边,然后对左右递归,最后合并

function quickSort($arr){

$count = count($arr);

if ($count <= 1) return $arr;

$base = $arr[0];

$left = $right = [];

for ($i = 1; $i < $count; $i++) {



if ($arr[$i] < $base) {





$left[] = $arr[$i];



} else {





$right[] = $arr[$i];



}

}

$left
= quickSort($left);

$right = quickSort($right);

return array_merge($left, [$base], $right);}

选择排序

选择一个值假设为最小,然后依次比较,发现比他小的就互换位置

function selectSort($arr){

$count = count($arr);

if ($count <= 1) return $arr;

for ($i = 0; $i < $count; $i++) {



//假设最小值位置



$p = $i;



//用假设的最小值$arr[$p]轮流比较,发现比他小的就互换



for ($j = $i + 1; $j < $count; $j++) {





if ($arr[$p] > $arr[$j]) {







$p = $j;





}



}



if ($p != $i) {





$tmp

 = $arr[$p];





$arr[$p] = $arr[$i];





$arr[$i] = $tmp;



}

}

return $arr;}

查找

二分查找

二分查找必须是一个排序好的数组,每次拿数组中间位置的值与目标进行比较

function binarySearch(array $arr, $target){

$low = 0;

$high = count($arr) - 1;

while ($low <= $high) {



$middle = floor(($high + $low) / 2);



if ( $arr[$middle] == $target ) {





return $middle;



} elseif ( $arr[$middle] < $target ) {





$low = $middle + 1;



} else {





$high = $middle - 1;



}

}

return false;}

推荐教程:PHP视频教程

以上就是PHP实现几个排序和查找算法的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的PHP实现几个排序和查找算法全部内容,希望文章能够帮你解决PHP实现几个排序和查找算法所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com