当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2020-02-25 20:22:23 浏览: 评论:0 

冒泡排序,快速排序,二分查找,虽然简单,但是一段时间不用的话就很容易忘记,这里是小编找来的用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; 

Tags: PHP查找算法

分享到: