加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php排序数组排序_PHP数组排序算法实现(14种)

发布时间:2022-11-04 10:57:51 所属栏目:PHP教程 来源:
导读:  本文将介绍快速排序、计数排序、梳排序、堆排序、归并排序、希尔排序、选择排序、插入排序、地精排序、联合冒泡排序、鸡尾酒排序、冒泡排序、奇偶排序、使用标志的冒泡排序14种排序算法的实现。本文是由于阅读了
  本文将介绍快速排序、计数排序、梳排序、堆排序、归并排序、希尔排序、选择排序、插入排序、地精排序、联合冒泡排序、鸡尾酒排序、冒泡排序、奇偶排序、使用标志的冒泡排序14种排序算法的实现。本文是由于阅读了文章《测试评估:14种排序算法和PHP数组》,才有想法学习、实现并总结这些算法PHP数组排序,特此分享,陆续补充。
 
  快速排序
 
  1、思想:主要采用了递归和分治的思想。选择标尺后,进行遍历数组,将大于标尺的放到一个数组,将小于标尺的放置到一个数组。再递归调用本函数并记录结果。
 
  2、实现
 
  function quickSort($arr) {
 
  //先判断是否需要继续进行
 
  $length = count($arr);
 
  if($length $arr[$i]) {
 
  $left[] = $arr[$i];
 
  }else {
 
  $right[] = $arr[$i];
 
  }
 
  }
 
  //递归调用并记录
 
  $left = $this->quickSort($left);
 
  $right = $this->quickSort($right);
 
  //合并
 
  return array_merge($left,array($base_num), $right);
 
  3、输入$arr = array(12, 100, 3, 20, 11,50);
 
  4、输出
 
  array:6 [▼
 
  0 => 3
 
  1 => 11
 
  2 => 12
 
  3 => 20
 
  4 => 50
 
  5 => 100
 
  ]
 
  计数排序
 
  1、此算法,是一种稳定的线性时间排序算法。其基本思想是,用待排序的数作为计数数组的下标,统计每个数字的个数。然后依次输出即可得到有序序列。但是理解比较难,本人还没理解通透,但是总结了几个步骤:
 
  找出数组$arr中最大的数$max
 
  初始化用来计数的数组$count_arr,数组大小为$max
 
  对于计数数组$count_arr键值等于$arr[$i]的值加1
 
  计数数组$count_arr相邻的两个值相加
 
  键值翻转得到数组$over_turn
 
  loop$over_turn,按照顺序push到最终的数组$result
 
  2、实现
 
  function countingSort($arr) {
 
  $length = count($arr);
 
  if($length 4
 
  3 => 6
 
  4 => 8
 
  ]
 
  梳排序
 
  1、思想:梳排序同样基于冒泡排序,梳排序比较的是固定距离处的数的比较和交换,类似希尔那样。是一种不稳定的排序算法。
 
  2、实现
 
  function combSort($arr) {
 
  $length = count($arr);
 
  $step = (int)floor($length/1.3);
 
  while($step >= 1) {
 
  for($i=0;$i
 
  if($i+$step$arr[$i+$step]) {
 
  $temp = $arr[$i];
 
  $arr[$i] = $arr[$i+$step];
 
  $arr[$i+$step] = $temp;
 
  }
 
  if($i+$step>$length) {
 
  break;
 
  }
 
  }
 
  $step = (int)floor($step/1.3);
 
  }
 
  return $arr;
 
  }
 
  3、输入$arr = array(8,4,3,7,6,5,2,1)
 
  4、输出
 
  array:8 [▼
 
  0 => 1
 
  1 => 2
 
  2 => 3
 
  3 => 4
 
  4 => 5
 
  5 => 6
 
  6 => 7
 
  7 => 8
 
  ]
 
  待补充
 

(编辑:PHP编程网 - 钦州站长网)

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