首先用实例来讲述一下PHP内置的一些排序函数

[a / k] sort [/ rsort]:[保留索引关系 / 按键名(保留键名关系,适用于关联数组)] 对数组进行排序,结束时数组单元将被从最低到最高 [/最高到最低] 排序。成功返回true,失败返回false

bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )

array : 要排序的数组

sort_flags : 可选第二个参数,可以用以下值改变排序行为

  • SORT_REGULAR - 正常比较单元(不改变类型)
  • SORT_NUMERIC - 单元被作为数字来比较
  • SORT_STRING - 单元被作为字符串来比较
<?php

/**
* @Author: Qy
* @Date: 2018-11-26 17:07:26
* @Last Modified by: Qy
* @Last Modified time: 2018-11-26 17:19:27
*/ $sortArr = ['Za', 'z', 23, 'A', 22, 41, 18, 20, 'aZ', 12, 200303, 'b', 'C', 'bC', 2200, 1192]; sort($sortArr);
/* 0 => string 'A' (length=1)
1 => string 'C' (length=1)
2 => string 'Za' (length=2)
3 => string 'aZ' (length=2)
4 => string 'b' (length=1)
5 => string 'bC' (length=2)
6 => string 'z' (length=1)
7 => int 12
8 => int 18
9 => int 20
10 => int 22
11 => int 23
12 => int 41
13 => int 1192
14 => int 2200
15 => int 200303*/ sort($sortArr, SORT_REGULAR); //正常比较单元(不改变类型)
/* 0 => string 'A' (length=1)
1 => string 'C' (length=1)
2 => string 'Za' (length=2)
3 => string 'aZ' (length=2)
4 => string 'b' (length=1)
5 => string 'bC' (length=2)
6 => string 'z' (length=1)
7 => int 12
8 => int 18
9 => int 20
10 => int 22
11 => int 23
12 => int 41
13 => int 1192
14 => int 2200
15 => int 200303*/
sort($sortArr, SORT_NUMERIC); //单元作为数字比较
/*0 => string 'A' (length=1)
1 => string 'C' (length=1)
2 => string 'Za' (length=2)
3 => string 'aZ' (length=2)
4 => string 'b' (length=1)
5 => string 'bC' (length=2)
6 => string 'z' (length=1)
7 => int 12
8 => int 18
9 => int 20
10 => int 22
11 => int 23
12 => int 41
13 => int 1192
14 => int 2200
15 => int 200303*/
sort($sortArr, SORT_STRING); //单元作为字符串比较
/*0 => int 1192
1 => int 12
2 => int 18
3 => int 20
4 => int 200303
5 => int 22
6 => int 2200
7 => int 23
8 => int 41
9 => string 'A' (length=1)
10 => string 'C' (length=1)
11 => string 'Za' (length=2)
12 => string 'aZ' (length=2)
13 => string 'b' (length=1)
14 => string 'bC' (length=2)
15 => string 'z' (length=1)*/
sort($sortArr, SORT_STRING); //单元作为字符串比较

natsort : 用 "自然排序" 算法对数组排序,成功返回true,失败返回false

bool natsort ( array &$array )

array : 要排序的数组

<?php

/**
* @Author: Qy
* @Date: 2018-11-26 17:07:26
* @Last Modified by: Qy
* @Last Modified time: 2018-11-26 17:30:29
*/ $array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png"); asort($array1);
/*3 => string 'img1.png' (length=8)
1 => string 'img10.png' (length=9)
0 => string 'img12.png' (length=9)
2 => string 'img2.png' (length=8)*/ natsort($array2);
/*3 => string 'img1.png' (length=8)
2 => string 'img2.png' (length=8)
1 => string 'img10.png' (length=9)
0 => string 'img12.png' (length=9)*/

natcasesort : 用 "自然排序" 算法对数组进行不区分大小写排序,成功返回true,失败返回false

bool natsort ( array &$array )

array : 要排序的数组

<?php

/**
* @Author: Qy
* @Date: 2018-11-26 17:07:26
* @Last Modified by: Qy
* @Last Modified time: 2018-11-26 17:33:25
*/
$array1 = $array2 = array('IMG0.png', 'img12.png', 'img10.png', 'img2.png', 'img1.png', 'IMG3.png'); sort($array1);
/* 0 => string 'IMG0.png' (length=8)
1 => string 'IMG3.png' (length=8)
2 => string 'img1.png' (length=8)
3 => string 'img10.png' (length=9)
4 => string 'img12.png' (length=9)
5 => string 'img2.png' (length=8));*/ natcasesort($array2);
/* 0 => string 'IMG0.png' (length=8)
4 => string 'img1.png' (length=8)
3 => string 'img2.png' (length=8)
5 => string 'IMG3.png' (length=8)
2 => string 'img10.png' (length=9)
1 => string 'img12.png' (length=9)*/

strnat[case]cmp : 使用自然排序算法比较字符串区分大小写[不区分大小写],与其他字符串比较函数类似,如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

int strnatcmp ( string $str1 , string $str2 )

/**
* @Author: Qy
* @Date: 2018-11-26 17:07:26
* @Last Modified by: Qy
* @Last Modified time: 2018-11-27 17:51:31
*/
//通常在自然算法中,数字 2 小于数字 10。而在计算机排序中,10 小于 2,这是因为 10 中的第一个数字小于 2
$str1 = "2.jpg";
$str2 = "10.jpg";
$str3 = "jb51.net_1";
$str4 = "JB51.NET_2";
echo strcmp($str1, $str2); //按字节进行比较,返回1
echo strcmp($str3,$str4);//按字节进行比较,返1
echo strnatcmp($str1,$str2);//按"自然排序"法进行比较,返回-1
echo strnatcmp($str3,$str4);//按"自然排序"法进行比较,返回1

接着整理了基本的PHP排序方法 :  冒泡排序,快速排序,选择排序,插入排序

冒泡排序

//在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。
即,每当两相邻的数比较后发现它们的排序与排序要求相反时,直到没有任何一对数字需要比较。就将它们互换。
冒泡排序其实上是和选择排序相比,并无明显差别。都是找到最小的,放到最左端。依次循环解决问题。
差别在于冒泡排序的交换位置的次数较多,而选择排序则是找到最小的元素的下标,然后直接和最左端的交换位置。
function order($arr = [])
{ $count = count($arr); if ($count == 2) {
if ($arr[0] > $arr[1]) {
$temp = $arr[0];
$arr[0] = $arr[1];
$arr[1] = $temp;
}
} elseif ($arr > 2) { //外层控制排序轮次 需要冒泡的轮次
for ($i = 0; $i < $count - 1; $i++) {
//内层控制每轮比较次数 冒出一个数 需要比较的次数 这里的-1意思是外层遍历当前元素往后的
for ($j = 0; $j < $count - 1 - $i; $j++) {
//说明前面数比后面大,交换
if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
}
}
}
}
return $arr;
}
$arr = array(6, 3, 8, 2, 9, 1);
$res = order($arr);
var_dump($res);

PHP算法之排序算法(PHP内置排序函数)的更多相关文章

  1. Oracle SQL常用内置系统函数总结

    Oracle数据库  内置系统函数主要分为以下类别:数学函数.字符串函数.日期函数.转换函数.聚合函数.分析聚合函数 一.数学函数 ------------返回数字       abs(n):返回数字 ...

  2. 浏览器内置Console函数使用详解

    浏览器内置Console函数比较好用:Chrome 和 FireFox(Firebug插件) 利用此功能可以像直接在面板里面运行JS一样(写法不同而已) 一.显示信息的命令 Firebug内置一个co ...

  3. javascript笔记整理(回调、递归、内置顶层函数)

    1.回调函数(通过函数的指针来调用函数,把一个函数的指针做为另一个函数的参数,当调用这个参数的时候,这个函数就叫做回调函数) a.通过指针来调用 function aa(a,b,fun){ retur ...

  4. 【学习】js学习笔记:内置顶层函数eval()的兼容用法

    今天学了一个内置顶层函数,eval();其作用是将字符串转换成javascript命令执行,但必须符合语法,否则会报错. 如果写成window.eval(),则其定义的变量会在全局生效. 但是,在IE ...

  5. 学习angularjs的内置API函数

    angularjs的内置API函数有很多,如isString()判断给定的对象是否为字符串,如果是返回 true,反之返回false:isNumber()判断给定的对象是否为数字,如果是返回 true ...

  6. PHP内置安全函数一览

    内置安全函数 filter_var函数 根据参数中的过滤类型进行过滤,如过滤Email类型的,则符合的字符串返回字符串,不符合的返回False. urldecode函数 写这个函数是特别为了提醒注意, ...

  7. Python descriptor 以及 内置property()函数

    Python Descriptor  1, Python Descriptor是这样一个对象 它按照descriptor协议, 有这样的属性之一 def __get__(self, obj, type ...

  8. python面向对象的多态-类相关内置函数-类内置魔法函数-迭代器协议-上下文管理-04

    多态 一种事物具备不同的形态 例如:水 --> 固态.液态.气态 多态:# 多个不同对象可以相应同一个对象,产生不同的结果 首先强调,多态不是一种特殊的语法,而是一种状态,特性(多个不同对象可以 ...

  9. Flex Array内置排序方法的使用

    在Array类中,提供内置的排序方法.排序是在软件开发的过程中,经常遇到的问题.通过这些内置的方法,可以快速轻便的进行排序操作. Array类提供sort方法对Array实例进行排序.sort方法没有 ...

随机推荐

  1. 集合框架—HashMap

    HashMap提供了三个构造函数:       HashMap():构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap.       HashMap(int ini ...

  2. zookeeper 详解

    是 分布式 协调 服务. ZK的工作:注册:所有节点向ZK争抢注册,注册成功会建立一套节点目录树,先注册的节点为Active节点,后注册节点成为standby;监听事件:节点在ZK集群里注册监听动作: ...

  3. Python: attrgetter()函数: 排序不支持原生比较的对象

    问题: 想排序类型相同的对象,但是他们不支持原生的比较操作. answer: 内置的sorted()函数有一个关键字参数key,可传入一个callable对象给它 这个callabel对象对每个传入的 ...

  4. Python: 正则表达式匹配反斜杠 "\"

    Python正则表达式匹配反斜杠 "\" eg: >>>a='w\w\w' 'w\\w\\w' #  打印出来的 "\\" 被转义成 一个反斜 ...

  5. jQuery 遍历 - eq() 方法 查找当前元素

    jQuery 遍历 - eq() 方法 if(data[i].status !='已送达'){ $('.w-beget').eq(i).attr('disabled','disabled'); }

  6. bootstrap table数据分页查询展示

    index.php <html> <head> <link rel="stylesheet" href="./css/bootstrap.m ...

  7. python基础八---文件操作

    1.文件操作 XXXXX.txt 1.文件路径:d:\XXXXX.txt(绝对路径) 2.编码方式:utf-8 gbk 3.操作方式:只读.只写.追加.读写.写读.... 排错: 以什么编码方式储存的 ...

  8. python 操作 hbase

    python 是万能的,当然也可以通过api去操作big database 的hbase了,python是通过thrift去访问操作hbase 以下是在centos7 上安装操作,前提是hbase已经 ...

  9. bzoj1650 / P2855 [USACO06DEC]河跳房子River Hopscotch / P2678 (noip2015)跳石头

    P2855 [USACO06DEC]河跳房子River Hopscotch 二分+贪心 每次二分最小长度,蓝后检查需要去掉的石子数是否超过限制. #include<iostream> #i ...

  10. assert_param

    在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用.如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义 ...