加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

详解php里的几种常见排序方法附代码

发布时间:2022-06-24 13:09:08 所属栏目:PHP教程 来源:互联网
导读:PHP有多种排序方法,本篇文章给大家介绍几种常见的排序方法:冒泡排序、交换法排序、选择法排序、插入法排序、快速排序。希望对大家有所帮助。 排序方法1:冒泡排序 function BubbleSort($arr) { // 获得数组总长度 $num = count($arr); // 正向遍历数组 f
  PHP有多种排序方法,本篇文章给大家介绍几种常见的排序方法:冒泡排序、交换法排序、选择法排序、插入法排序、快速排序。希望对大家有所帮助。
 
  排序方法1:冒泡排序
 
  function BubbleSort($arr) {
  
      // 获得数组总长度
  
      $num = count($arr);
  
      // 正向遍历数组
  
      for ($i = 1; $i < $num; $i++) {
  
          // 反向遍历
  
          for ($j = $num - 1; $j >= $i ; $j--) {
  
              // 相邻两个数比较
  
              if ($arr[$j] < $arr[$j-1]) {
  
                  // 暂存较小的数
  
                  $iTemp = $arr[$j-1];
  
                  // 把较大的放前面
  
                  $arr[$j-1] = $arr[$j];
  
                  // 较小的放后面
  
                  $arr[$j] = $iTemp;
  
              }
  
          }
  
      }
  
      return $arr;
  
  }
  排序方法2:交换法排序
 
  function ExchangeSort($arr){
  
      $num = count($arr);
  
      // 遍历数组
  
      for ($i = 0;$i < $num - 1; $i++) {
  
          // 获得当前索引的下一个索引
  
          for ($j = $i + 1; $j < $num; $j++) {
  
              // 比较相邻两个的值大小
  
              if ($arr[$j] < $arr[$i]) {
  
                  // 暂存较小的数
  
                  $iTemp = $arr[$i];
  
                  // 把较大的放前面
  
                  $arr[$i] = $arr[$j];
  
                  // 较小的放后面
  
                  $arr[$j] = $iTemp;
  
              }
  
          }
  
      }
  
      return $arr;
  
  }
  排序方法3:选择法排序
 
  function SelectSort($arr) {
  
      // 获得数组总长度
  
      $num = count($arr);
  
      // 遍历数组
  
      for ($i = 0;$i < $num-1; $i++) {
  
          // 暂存当前值
  
          $iTemp = $arr[$i];
  
          // 暂存当前位置
  
          $iPos = $i;
  
          // 遍历当前位置以后的数据
  
          for ($j = $i + 1;$j < $num; $j++){
  
              // 如果有小于当前值的
  
              if ($arr[$j] < $iTemp) {
  
                  // 暂存最小值
  
                  $iTemp = $arr[$j];
  
                  // 暂存位置
  
                  $iPos = $j;
  
              }
  
          }
  
          // 把当前值放到算好的位置
  
          $arr[$iPos] = $arr[$i];
  
          // 把当前值换成算好的值
  
          $arr[$i] = $iTemp;
  
      }
  
      return $arr;
  
  }
  排序方法4:插入法排序
 
  function InsertSort($arr){
  
      $num = count($arr);
  
      // 遍历数组
  
      for ($i = 1;$i < $num; $i++) {
  
          // 获得当前值
  
          $iTemp = $arr[$i];
  
          // 获得当前值的前一个位置
  
          $iPos = $i - 1;
  
          // 如果当前值小于前一个值切未到数组开始位置
  
          while (($iPos >= 0) && ($iTemp < $arr[$iPos])) {
  
              // 把前一个的值往后放一位
  
              $arr[$iPos + 1] = $arr[$iPos];
  
              // 位置递减
  
              $iPos--;
  
          }
  
          $arr[$iPos+1] = $iTemp;
  
      }
  
      return $arr;
  
  }
  排序方法5:快速排序
 
  function QuickSort($arr){
  
      $num = count($arr);
  
      $l = $r = 0;
  
      $left = $right = array();
  
      // 从索引的第二个开始遍历数组
  
      for ($i = 1;$i < $num; $i++) {
  
          // 如果值小于索引1
  
          if ($arr[$i] < $arr[0]) {
  
              // 装入左索引数组(小于索引1的数据)
  
              $left[] = $arr[$i];
  
              $l++;
  
          } else {
  
              // 否则装入右索引中(大于索引1的数据)
  
              $right[] = $arr[$i];
  
              $r++; //
  
          }        
  
      }
  
      // 如果左索引有值 则对左索引排序
  
      if($l > 1) {
  
          $left = QuickSort($left);
  
      }
  
      // 排序后的数组
  
      $new_arr = $left;
  
      // 将当前数组第一个放到最后
  
      $new_arr[] = $arr[0];
  
      // 如果又索引有值 则对右索引排序
  
      if ($r > 1) {
  
          $right = QuickSort($right);
  
      }
  
      // 根据右索引的长度再次增加数据
  
      for($i = 0;$i < $r; $i++) {
  
          $new_arr[] = $right[$i];
  
      }
  
      return $new_arr;
  
  }。
 

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读