这篇文章主要介绍了php基本算法有哪些,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
基本算法:
冒泡排序
//逐行对比,满足条件则交换
function bubbleSort($arrData,$sort = 'desc')
{
if(empty($arrData)) return $arrData;
//默认有序
$isSorted = true;
$nCount = count($arrData);
for($i = 0; $i < $nCount; $i++) {
//对比次数随着循环逐渐减少,因为后面的数据已经处理为有序
for($j = 0; $j < ($nCount - $i - 1); $j++) {
//执行判断
$isChange = $sort == 'desc' ? $arrData[$j] < $arrData[$j+1] : $arrData[$j] > $arrData[$j+1];
if($isChange) {
//首次对比,判断是否有序
$isSorted = false;
$temp = $arrData[$j];
$arrData[$j] = $arrData[$j+1];
$arrData[$j+1] = $temp;
}
}
if($isSorted) break;
}
return $arrData;
}
快速排序
//选取一个标准,和其他数据对比后将数据分为两批,递归执行后合并
function quickSort(&$arr, $sort = 'asc'){
//检查数据,多于一个数据才执行
$nCount = count($arr);
if($nCount > 1) {
//选取标准(第一个数据)
$nStandard = $arr[0];
$arrLeftData = [];
$arrRightData = [];
//遍历,注意这里从1开始比较
for($i = 1; $i < $nCount; $i++) {
if($sort == 'desc') {
$arr[$i] > $nStandard ? $arrLeftData[] = $arr[$i] : $arrRightData[] = $arr[$i];
} else {
$arr[$i] > $nStandard ? $arrRightData[] = $arr[$i] : $arrLeftData[] = $arr[$i];
}
}
$arr = array_merge($this->quickSort($arrLeftData, $sort), array($nStandard), $this->quickSort($arrRightData, $sort));
}
return $arr;
}
二分查找
//假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;
//若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止
function binSearch($toSearch,$arr)
{
//确定当前的检索范围
$nCount = count($arr);
//低位键,初始为0
$nLowNum = 0;
//高位键,初始为末尾
$nHighNum = $nCount - 1;
while($nLowNum <= $nHighNum) {
//选定大概中间键
$nMiddleNum = intval(($nHighNum + $nLowNum)/2);
if($arr[$nMiddleNum] > $toSearch) {
//比检索值大
$nHighNum = $nMiddleNum - 1;
} elseif ($arr[$nMiddleNum] < $toSearch) {
//比检索值小
$nLowNum = $nMiddleNum + 1;
} else {
return $nMiddleNum;
}
}
return false;
}
顺序查找
function seqSearch($arr,$toSearch)
{
$nCount = count($arr);
for ($i=0; $i < $nCount; $i++) {
if ($arr[$i] == $toSearch) {
return $i;
}
}
return -1;
}
选择排序
//在第一次循环中,假设第一个数是最小的;然后跟第二个数比较,一直比到最后,找出最小值,然后把最小值跟第一个数的位置互换;
//再进行下一次循环,找出最小值跟第二个位置的数互换;一直循环数组的个数减去1次;数组就成了有序的了
function selectSort($arr)
{
$nCount = count($arr);
//遍历取得需要排序的数
for($i = 0; $i < $nCount; $i++) {
//选择需要比较的数,从$i开始到结束
for($j = $i + 1; $j < $nCount; $j++) {
//比较
if($arr[$j] < $arr[$i]) {
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
return $arr;
}
感谢你能够认真阅读完这篇文章,希望小编分享php基本算法有哪些内容对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,遇到问题就找亿速云,详细的解决方法等着你来学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。