详解php中的几种常见排序方法(附代码)
发布:smiling 来源: PHP粉丝网 添加日期:2022-06-21 08:29:12 浏览: 评论:0
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;
- }
Tags: php排序方法
- 上一篇:处理PHP strtotime的BUG
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)