www.adminn.cn
站长正能量分享网!

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

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

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

排序

冒泡排序

每一次冒出一个最大的值

  1. function bubbleSort($arr
  2.     $count = count($arr); 
  3.     if ($count == 0) return false; 
  4.  
  5.     for ($i = 0; $i < $count – 1; $i++) { 
  6.         for ($k = 0; $k < $count – 1 – $i$k++) { 
  7.             if ($arr[$k] < $arr[$k + 1]) { 
  8.                 $tmp         = $arr[$k]; 
  9.                 $arr[$k]     = $arr[$k + 1]; 
  10.                 $arr[$k + 1] = $tmp
  11.             } 
  12.         } 
  13.     } 
  14.  
  15.     return $arr

快速排序

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

  1. function quickSort($arr
  2.     $count = count($arr); 
  3.     if ($count <= 1) return $arr
  4.  
  5.     $base = $arr[0]; 
  6.     $left = $right = []; 
  7.     for ($i = 1; $i < $count$i++) { 
  8.         if ($arr[$i] < $base) { 
  9.             $left[] = $arr[$i]; 
  10.         } else { 
  11.             $right[] = $arr[$i]; 
  12.         } 
  13.     } 
  14.  
  15.     $left  = quickSort($left); 
  16.     $right = quickSort($right); 
  17.  
  18.     return array_merge($left, [$base], $right); 

选择排序

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

  1. function selectSort($arr
  2.     $count = count($arr); 
  3.     if ($count <= 1) return $arr
  4.  
  5.     for ($i = 0; $i < $count$i++) { 
  6.         //假设最小值位置 
  7.         $p = $i
  8.         //用假设的最小值$arr[$p]轮流比较,发现比他小的就互换 
  9.         for ($j = $i + 1; $j < $count$j++) { 
  10.             if ($arr[$p] > $arr[$j]) { 
  11.                 $p = $j
  12.             } 
  13.         } 
  14.  
  15.         if ($p != $i) { 
  16.             $tmp     = $arr[$p]; 
  17.             $arr[$p] = $arr[$i]; 
  18.             $arr[$i] = $tmp
  19.         } 
  20.     } 
  21.  
  22.     return $arr

查找

二分查找

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

  1. function binarySearch(array $arr$target
  2.     $low = 0; 
  3.     $high = count($arr) – 1; 
  4.     while ($low <= $high) { 
  5.         $middle = floor(($high + $low) / 2); 
  6.         if ( $arr[$middle] == $target ) { 
  7.             return $middle
  8.         } elseif ( $arr[$middle] < $target ) { 
  9.             $low = $middle + 1; 
  10.         } else { 
  11.             $high = $middle – 1; 
  12.         } 
  13.     } 
  14.  
  15.     return false; 

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP实现几个排序和查找算法》
文章链接:https://www.adminn.cn/news/7774.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

Adminn.Cn 站长分享圈

帝国CMS精品模板腾讯云优惠券,代金券

2次开发,学习研究使用!扫码支付后联系QQ677123发货!

支付宝扫一扫打赏