php复习,PHP排序算法的复习和总结

直接上代码吧!

/*

* 插入排序(一维数组)

* 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当的位置,使数列依然有序;直到待排序的数据元素全部插入完成为止。

*/

function insertSort($arr){

if(!is_array($arr) || count($arr)==0){

return $arr;

}

$count = count($arr);

for($i=1; $i

if(isset($arr[$i])){

$tmp = $arr[$i]; //获取后一个元素的值

$j = $i - 1; //获取前面的下标

while($arr[$j] > $tmp){ //如果前面一个比后面一个大, 这里是从小到大

$arr[$j+1] = $arr[$j]; //把小的元素和前面的对换,直到移动到合适的位置,在移动下一个

$arr[$j] = $tmp;

$j--;

}

}

}

return $arr;

}

/*

* 选择排序(一维数组)

* 每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

*/

function selectSort($arr){

if(!is_array($arr) || count($arr) == 0)

{

return $arr;

}

$count = count($arr);

for($i=0; $i

$k = $i;

for($j=$i+1; $j

if ($arr[$k] > $arr[$j])

$k = $j; //找出最小的

if ($k != $i){

$tmp = $arr[$i];

$arr[$i] = $arr[$k];

$arr[$k] = $tmp;

}

}

}

return $arr;

}

/*

* 冒泡排序(一维数组)

* 两两比较待排序数据元素的大小,发现两个数据元素的次序相反即进行交换,直到没有反序的数据元素为止

*/

function bubbleSort($array){

$count = count($array);

if ($count <= 0) {

return false;

}

for($i=0; $i

for($j=$count-1; $j>$i; $j--){

if ($array[$j] < $array[$j-1]){ //比较找到的数进行交换

$tmp = $array[$j];

$array[$j] = $array[$j-1];

$array[$j-1] = $tmp;

}

}

}

return $array;

}

/*

* 快速排序(一维数组)

*

*/

function quickSort($array){

if (count($array) <= 1){

return $array;

}

$key = $array[0];

$left_arr = array();

$right_arr = array();

for ($i=1; $i

if ($array[$i] <= $key){

$left_arr[] = $array[$i];

}else{

$right_arr[] = $array[$i];

}

}

$left_arr = quickSort($left_arr);

$right_arr = quickSort($right_arr);

return array_merge($left_arr, array($key), $right_arr);

}

/**

* 按照元素的值进行排序

* strOrder 为排列的顺序 asc 升序 desc 降序

*/

function sortByVal($arr,$strOrder='asc')

{

if(!is_array($arr) || count($arr)==0)

{

return $arr;

}

$arrReturn = array();

foreach($arr as $key=>$val)

{

$arrKey[] = $key;

$arrVal[] = $val;

}

$count = count($arrVal);

if($count)

{

//创建key的顺序数组

for($key=0;$key

{

$arrKeyMap[$key] = $key;

}

//对值进行排序

for($i=0;$i

{

for($j = $count-1; $j>$i;$j--)

{

//

$bol = $strOrder == 'asc' ? $arrVal[$j]$arrVal[$j-1];

if($bol){

$tmp = $arrVal[$j];

$arrVal[$j] = $arrVal[$j-1];

$arrVal[$j-1] = $tmp;

//值的冒泡排序,引起key的数组的交互

$keytmp = $arrKeyMap[$j];

$arrKeyMap[$j] = $arrKeyMap[$j-1];

$arrKeyMap[$j-1] = $keytmp;

}

}

}

if(count($arrKeyMap))

{

foreach ($arrKeyMap as $val)

{

$arrReturn[] = $arrKey[$val];

}

}

return $arrReturn;

}

}

/**

* 使用原生的函数进行数组按照值进行排列

*/

function arraySortByVal($arr,$keys,$type='asc'){

$keysvalue = $new_array = array();

foreach ($arr as $k=>$v){

$keysvalue[$k] = $v[$keys];

}

if($type == 'asc'){

asort($keysvalue);

}else{

arsort($keysvalue);

}

reset($keysvalue);

foreach ($keysvalue as $k=>$v){

$new_array[$k] = $arr[$k];

}

return $new_array;

}

对于下面的2个对于array的值进行排序的方法一个是自己实现的一个是使用了原生的PHP函数的,其实排序对于少量数据一般就单页的数据量的数据还是可以的,如果涉及到大量的数据的排序,建议可以整合到MYSQL的基础类中来进行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker-machine

vbox安装 sudo /sbin/vboxconfig &#xfffc; yum install gcc make yum install kernel-devel-3.10.0-514.26.2.el7.x86_64 转载于:https://www.cnblogs.com/yixiaoyi/p/dockermachine.html

intention lock_写作技巧:你写出来的情节有用吗?好情节的原则——LOCK系统

读者喜欢一本小说的原因只有一个&#xff1a;很棒的故事。——Donald Maass来&#xff0c;话筒对准这位小作家&#xff0c;请问你是如何构思故事的&#xff1f;是习惯于现在脑海中把故事都想好了&#xff0c;才开始写作&#xff1f;还是习惯于临场发挥&#xff0c;喜欢一屁股坐…

zookeeper基本操作

1.客户端连接 [txtest1 bin]$ jps 23433 Jps 23370 QuorumPeerMain #zookeeper进程[txtest1 bin]$ ./zkCli.sh -server test1:2182 Connecting to test1:2182 2018-01-24 23:42:09,024 [myid:] - INFO [main:Environment100] - Client environment:zookeeper.version3.4.5-…

sqllite java 密码,SQLite登录检查用户名和密码

我正在创建一个应用程序(使用Java和SQLite)(JFrame&#xff0c;使用Netbeans)我有我想要登录的用户 . (我有所有正确的包JDBC&#xff0c;SQLite等)我遇到的问题似乎是获取用户名/密码来检查我的users.db文件..我正在使用Java和SQLite . 我也在使用JDBC .我的一些代码作为一个例…

springmvc与struts2的区别

1&#xff09;springmvc的入口是一个servlet&#xff0c;即前端控制器&#xff0c;例如&#xff1a;*.action struts2入口是一个filter过虑器&#xff0c;即前端过滤器&#xff0c;例如&#xff1a;/* 2&#xff09;springmvc是基于方法开发&#xff0c;传递参数是通过方法形…

power designer数据流图_鲲云公开课 | 三分钟带你了解数据流架构

目前&#xff0c;市场上的芯片主要包括指令集架构和数据流架构两种实现方式。指令集架构主要包括X86架构、ARM架构、精简指令集运算RISC-V开源架构&#xff0c;以及SIMD架构。总体来说&#xff0c;四者都属于传统的通用指令集架构。传统的指令集架构采用冯诺依曼计算方式&#…

onCreate源码分析

原文地址Android面试题-onCreate源码都没看过&#xff0c;怎好意思说自己做android Activity扮演了一个界面展示的角色&#xff0c;堪称四大组件之首&#xff0c;onCreate是Activity的执行入口&#xff0c;都不知道入口到底干了嘛&#xff0c;还学什么android,所以本文会从源码…

linux php环境搭建教程,linux php环境搭建教程

linux php环境搭建的方法&#xff1a;首先获取相关安装包&#xff1b;然后安装Apache以及mysql&#xff1b;接着修改配置文件“httpd.conf”&#xff1b;最后设置环境变量和开机自启&#xff0c;并编译安装PHP即可。一、获取安装包PHP下载地址&#xff1a;http://cn.php.net/di…

Apache2.2与Tomcat7集成方案详解

原文地址&#xff1a;http://my.oschina.net/u/919173/blog/159206 ------------------------------------ 首先谈一下为什么要集成Apache和tomcat7&#xff1f; Apache是当前使用最为广泛的WWW服务器软件&#xff0c;具有相当强大的静态HTML处理的能力。 Tomcat服务器是一个…

cocos 制作动态生成内容的列表_零代码工具,让你在线轻松制作交互内容!

在工作中设计师不会写代码&#xff0c;懂代码的不会设计&#xff0c;2种不同工作互掐的情况屡见不鲜&#xff0c;那我们如何把这2项工作一并融合贯通呢&#xff1f;对于不懂代码的职场“小白”&#xff0c;我们可以利用一些零代码工具来完成。今天小编介绍几款在线开发设计工具…

php怎样数据缓存文件,php数据缓存到文件类设计

// 自定义缓存类class Cache_Filesystem {// 缓存写保存function set ($key, $data, $ttl) {//打开文件为读/写模式$h fopen($this->get_filename($key), ‘a‘);if (!$h) throw new Exception("Could not write to cache");flock($h, LOCK_EX); //写锁定&#x…

jsp放在web-inf下的注意事项

原文&#xff1a;http://blog.csdn.net/whatlookingfor/article/details/38381881 ------------------------------------------------- web-inf目录是不对外开放的&#xff0c;外部没办法直接访问到。所有只能通过映射来访问&#xff0c;比如映射为一个action或者servlet通过…

php打印布尔型,PHP数据类型之布尔型的介绍_PHP

布尔类型是PHP中 最简单的类型。它的值可以为 TRUE 或 FALSE。如&#xff1a;$foofalse;$foo1true;echo "为假时输出值为:".$foo; //没有输出值echo "为真时输出值为:".$foo1; //输出1这里主要的细节&#xff1a;当转换为 boolean 时&#xff0c;以下值被认…

oracle 如何终止存储过程的运行

0.查询正在执行的存储过程&#xff1a; select * from v$db_object_cache where locks > 0 and pins > 0 and typePROCEDURE;1. 在V$ACCESS视图中找到要停止进程的SID: 举例&#xff1a;存储过程名&#xff1a;CRH_ENTRY SELECT t.* FROM V$ACCESS t WHERE t.objectCRH_…

python install zabbix.4.0

1.安装 MySQLdb 模块; #!/bin/bash #this is rpm python Environment depends on function depends_rpm(){ yum clean all yum -y install gcc* python-devel python-pip mariadb mariadb-devel mariadb-server if [ $? -eq 0 ]thenpip install MySQL-python1.2.5 elsee…

asp.net 获取全部在线用户_Qamp;A | 在线考试问卷答疑

01.如何批量导入试题&#xff1f;如果您已经在word或者excel中准备好了考试文档&#xff0c;通过批量导入试题的方式&#xff0c;可以让考试问卷的制作更加方便快捷。详细了解批量导入考试的文本格式&#xff1a;【点击此处】02.如何进行考试随机抽题&#xff1f;老师事先建立题…

PHP 框架 模块化,Laravel 的模块化开发框架 Notadd RC1

本文我们要和大家分享 Laravel 的模块化开发框架 Notadd RC1 的介绍&#xff0c;它的优点是修复了首页编辑模式下滚动的BUG (Eleven)&#xff0c;修复了后台菜单管理修改后不跳转的BUG (ganlanshu0211)&#xff0c;修复后台 ESLint 的 Camelcase 的错误 (狒狒)&#xff0c;暂时…

spring mvc 工作流程

1A&#xff09;客户端发出http请求&#xff0c;只要请求形式符合web.xml 文件中配置的*.action的话&#xff0c;就由DispatcherServlet 来处理。 1B&#xff09;DispatcherServlet再将http请求委托给映射器 的对象来将http请求交给对应的Action来处理 2&#xff0…

9-2 链表

package gather;import java.util.LinkedList; import java.util.List; import java.util.ListIterator;public class TestFour {public static void main(String[] args) {// TODO Auto-generated method stub/*** 1、通过整数遍历元素时&#xff0c;不要使用链表结构&#xf…