首页 > 开发 > PHP > 正文

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

2024-05-04 22:02:08
字体:大 中 小
来源:转载
供稿:网友

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

排序

冒泡排序

每一次冒出一个最大的值

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

快速排序

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

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

选择排序

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

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

查找

二分查找

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表