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

PHP各种常见经典算法总结【排序、查找、翻转等】

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-09 14:43:19 浏览: 评论:0 

本文实例讲述了PHP各种常见经典算法,分享给大家供大家参考,具体如下:

冒泡排序算法

  1. public function test() { 
  2.     $arr = array(43, 54, 62, 21, 66, 32, 78, 36, 76, 39); 
  3.     var_dump($arr); 
  4.     echo '<br/>'
  5.     $arr = $this->bubbleSort($arr); 
  6.     var_dump($arr); 
  7. public function bubbleSort($arr) { 
  8.     $len = count($arr); 
  9.     //该层循环控制 需要冒泡的轮数 
  10.     for ($i = 1; $i < $len$i++) { 
  11.       //该层循环用来控制每轮 冒出一个数 需要比较的次数 
  12.       for ($k = 0; $k < $len - $i$k++) { 
  13.         if ($arr[$k] > $arr[$k + 1]) { 
  14.           $tmp = $arr[$k + 1]; // 声明一个临时变量 
  15.           $arr[$k + 1] = $arr[$k]; 
  16.           $arr[$k] = $tmp
  17.         } 
  18.       } 
  19.     } 
  20.     return $arr

快速排序

  1. public function quick_sort($arr) { 
  2.     //先判断是否需要继续进行 
  3.     $length = count($arr); 
  4.     if ($length <= 1) { 
  5.       return $arr
  6.     } 
  7.     $base_num = $arr[0]; //选择一个标尺 选择第一个元素 
  8.     //初始化两个数组 
  9.     $left_array = array(); //小于标尺的 
  10.     $right_array = array(); //大于标尺的 
  11.     for ($i = 1; $i < $length$i++) {   //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内 
  12.       if ($base_num > $arr[$i]) { 
  13.         //放入左边数组 
  14.         $left_array[] = $arr[$i]; 
  15.       } else { 
  16.         //放入右边 
  17.         $right_array[] = $arr[$i]; 
  18.       } 
  19.     } 
  20.     //再分别对 左边 和 右边的数组进行相同的排序处理方式 
  21.     //递归调用这个函数,并记录结果 
  22.     $left_array = $this->quick_sort($left_array); 
  23.     $right_array = $this->quick_sort($right_array); 
  24.     //合并左边 标尺 右边 
  25.     return array_merge($left_arrayarray($base_num), $right_array); 
  26. public function test() { 
  27.     $arr = array(4, 3, 1, 2, 8, 9); 
  28.     var_dump($arr); 
  29.     echo '<br/>'
  30.     $arr = $this->quick_sort($arr); 
  31.     var_dump($arr); 

二分查找

  1. public function bin_search($arr$low$high$k) { 
  2.     if ($low <= $high) { 
  3.       $mid = intval(($low + $high) / 2); 
  4.       if ($arr[$mid] == $k) { 
  5.         return $mid
  6.       } else if ($k < $arr[$mid]) { 
  7.         return $this->bin_search($arr$low$mid - 1, $k); 
  8.       } else { 
  9.         return $this->bin_search($arr$mid + 1, $high$k); 
  10.       } 
  11.     } 
  12.     return -1; 
  13. public function test() { 
  14.     $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 
  15.     var_dump($arr); 
  16.     echo '<br/>'
  17.     $arr = $this->bin_search($arr, 0, 8, 4); 
  18.     var_dump($arr); 

顺序查找

  1. public function seq_search($arr$n$k) { 
  2.     $array[$n] = $k
  3.     for ($i = 0; $i < $n$i++) { 
  4.       if ($arr[$i] == $k) { 
  5.         break
  6.       } 
  7.     } 
  8.     if ($i < $n) { 
  9.       return $i
  10.     } else { 
  11.       return -1; 
  12.     } 
  13. public function test_suanfa() { 
  14.     $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 
  15.     var_dump($arr); 
  16.     echo '<br/>'
  17.     $arr = $this->seq_search($arr, 4, 4); 
  18.     var_dump($arr); 

线性表的删除

  1. public function delete_array_element($array$i) { 
  2.     $len = count($array); 
  3.     for ($j = $i$j < $len$j ++) { 
  4.       if (isset($array[$j + 1])) { 
  5.         $array[$j] = $array[$j + 1]; 
  6.       } 
  7.     } 
  8.     array_pop($array); 
  9.     return $array
  10. public function test() { 
  11.     $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 
  12.     var_dump($arr); 
  13.     echo '<br/>'
  14.     $arr = $this->delete_array_element($arr, 4); 
  15.     var_dump($arr); 

字符串翻转

  1. public function strrev($str) { 
  2.     $rev_str = ''
  3.     if ($str == '') { 
  4.       return 0; 
  5.     } 
  6.     for ($i = (strlen($str) - 1); $i >= 0; $i --) { 
  7.       $rev_str .= $str[$i]; 
  8.     } 
  9.     return $rev_str
  10. public function test() { 
  11.     $arr = 'hellow wolrd'
  12.     var_dump($arr); 
  13.     echo '<br/>'
  14.     $arr = $this->strrev($arr); 
  15.     var_dump($arr);

Tags: PHP排序 PHP查找 PHP翻转

分享到: