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

详解php中的几种常见排序技巧

发布时间:2022-07-29 14:02:03 所属栏目:PHP教程 来源:互联网
导读:PHP有多种排序方法,本篇文章给大家介绍几种常见的排序方法:冒泡排序、交换法排序、选择法排序、插入法排序、快速排序。希望对大家有所帮助。 排序方法1:冒泡排序 // 获得数组总长度 $num = count($arr); // 正向遍历数组 for ($i = 1; $i $num; $i++) { /
  PHP有多种排序方法,本篇文章给大家介绍几种常见的排序方法:冒泡排序、交换法排序、选择法排序、插入法排序、快速排序。希望对大家有所帮助。
 
  排序方法1:冒泡排序
 
 
      // 获得数组总长度
 
      $num = count($arr);
 
      // 正向遍历数组
 
      for ($i = 1; $i < $num; $i++) {
 
          // 反向遍历
 
          for ($j = $num - 1; $j >= $i ; $j--) {
 
              // 相邻两个数比较
 
              if ($arr[$j] < $arr[$j-1]) {
 
                  // 暂存较小的数
 
 
              }
 
          }
 
      }
 
      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];
 
  }
 
  排序方法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 ($r > 1) {
 
          $right = QuickSort($right);
 
      }
 
      // 根据右索引的长度再次增加数据
 
      for($i = 0;$i < $r; $i++) {
 
          $new_arr[] = $right[$i];
 
      }
 
      return $new_arr;
 
  }

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

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

    热点阅读