一、冒泡排序法

说明:找到最大的数,排列到最后面,然后继续找
例:
$arr = array(3,5,-1,0,2);
for($i=0;$i<count($arr)-1;$i++){
for($j=0;$j<count($arr)-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$temp = $arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
理解:
3,5,-1,0,2
//从第一个数开始往后比较,如果比后面的数大则与后面的数调位置 
//第一次,3小于5,那么不变
//第二次,5大于-1,那么变成
3,-1,5,0,2
//第三次,5大于0
3,-1,0,5,2
//第四次,5大于2
3,-1,0,2,5
至此完成一次内循环,此时最后一个数完成排序,下次将不参与
3,-1,0,2,5
第二次外循环开始
第一次:3大于-1
-1,3,0,2,5
第二次:3大于0
-1,0,3,2,5
第三次:3大于2
-1,0,2,3,5
至此完成后面两位数的排序了,接下来类推
-1,0,2,3,5
 
二、选择排序法
说明:先假设第一个数就是最小的数,然后将后面的数依次与它比较,如果假设的数不是最小的数,就将它与后面的最小的数调换位置
$arr=array(2,1,-1,3,0);
for($i=0;$i<count($arr)-1;$i++){
$minval = $arr[$i];
$minindex = $i;
for($j=1+$i;$j<count($arr);$j++){
if($arr[$j]<$minval){
$minval = $arr[$j];
$minindex = $j;
}
}
$temp = $arr[$i];
$arr[$i] = $arr[$minindex];
$arr[$minindex] = $temp;
}

理解:
2,1,-1,3,0
//先假设第一个数2为最小值,它后面的数依次与2做比较,寻找到最小的那个数
过程:
1小于2,那么minval=1
-1小于1,那么minval=-1
3大于-1,不变
0大于-1,不变
那么现在就找到了该数组中最小的数了为-1
将-1与2调换位置就完成第一个数的排序了
那么现在数组变成
-1,1,2,3,0
现在第一个数-1已经为有序,所以不参与比较了,往后面继续
现在假设minval=1
2大于1,不变
3大于1,不变
0小于1,那么minval=0
现在一次循环完成,调换0与1的位置完成第二个数的排序
那么现在数组变成
-1,0,2,3,1
//后面的推法与上面相同。。。
三、插入排序法
说明:先假设一个数组中的第一个数为单独的有序数组,再将后面的一个数与它【这里随它I的增长,就变成它们了】做比较,如果后面的数比假设的数还小,则将小的那个数后移,最后将那个数移到最前面
$arr=array(2,1,-1,3,0);
for($i=1;$i<count($arr);$i++){
$insertval=$arr[$i];
$insertindex = $i-1;
while($insertindex>=0 && $insertval<$arr[$insertindex]){
$arr[$insertindex+1]=$arr[$insertindex];
$insertindex--;
}
$temp = $arr[$i];
$arr[$insertindex+1]=$insertval;
}

理解:
2,1,-1,3,0
//第一次,先保存待插入的数1为insertval,再拿 insertval 与2比较,1小于2,所以把2后移,变成如下的图
2,2,-1,3,0
//此时2前面没有数字了,insertindex=0,所以比较完成,那么将insertval插入到寻找到的这个位置。变成如下图
1,2,-1,3,0
//此时,1,2变成有序数组
//第二次,先保存待插入的数-1为insertval,再拿insertval与2做比较,-1小于2,所以把2后移,变成如下图
1,2,2,3,0
//此时,再拿insertval与1做比较,-1小于1,那么把-1后移,变成如下图(这就是一个拿待插入数与前面的有序数组比较的过程)
1,1,2,3,0
//此时,insertindex到头了,所以将insertval插入该位置
-1,1,2,3,0
//后面推法如上

转载于:https://www.cnblogs.com/cnbeir/archive/2012/05/05/2484608.html

PHP中数组的三种排序方法相关推荐

  1. php冒泡 插入选择 排序,说说PHP数组的三种排序(冒泡/选择/插入)方法

    说说PHP数组的三种排序(冒泡/选择/插入)方法 PHP #数组 #排序 #冒泡 #选择 #插入2012-05-30 10:17 一.冒泡排序法 说明:找到最大的数,排列到最后面,然后继续找 例: $ ...

  2. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...

    java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...

  3. 二叉树的三种排序方法

    二叉树的三种排序方法 1.前序排列 :根-左子-右子 1->2->4->5->8->10->9->3->6->7 2.中序排列:左子-根-右子 4 ...

  4. php页面底部信息居中,css底部如何局中?css三种居中方法

    本篇文章给大家带来的内容是关于css底部如何局中?css三种居中方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 某天组长让我改一个表格的样式,要求底部局中.当时想很简单的嘛,哼哧 ...

  5. Java数组的三种定义方法

    Java数组的三种定义方法 1.第一种适合不用初始化的数组.数组特别长的时候,不初始化,值都是默认值. 2.第二种定义适合直接初始化数组 3.第三种匿名数组适合直接给方法传入参数时使用 1.第一种适合 ...

  6. 数组的四种排序方法介绍

    最近在学习和练习一些算法方面的知识,发现在java中运用数组进行排序一般就四种方法:快速排序法.冒泡法.选择排序法.插入排序法.我们只要掌握这四种排序方法,基本上就能解决所有的排序问题.所以我接下来就 ...

  7. 打开计算机后 无法最小化,最小化窗口后无法在任务栏中显示的三种解决方法...

    [文章导读]最近有用户反映打开的窗口最小化后无法在任务栏中显示,通常情况下点击程序的最小化按钮都会显示在任务栏中,方便我们点击再次打开. 最近有用户反映打开的窗口最小化后无法在任务栏中显示,通常情况下 ...

  8. JavaScript中函数的三种定义方法

    JavaScript中函数定义的三种方法. 函数的三种定义方法分别是:函数定义语句.函数直接量表达式和Function()构造函数的方法.下面依次介绍这几种方法具体怎么实现. 1. 函数定义语句 // ...

  9. Go中的三种排序方法

    排序操作是很多程序经常使用的操作.尽管一个简短的快排程序只要二三十行代码就可以搞定,但是一个健壮的实现需要更多的代码,并且我们不希望每次我们需要的时候都重写或者拷贝这些代码.幸运的是,Go内置的sor ...

最新文章

  1. 回归算法分类,常用回归算法解析
  2. 高成本低收益的市场现状下 安防企业该怎么办?
  3. 8Manage PPM助力中投证券 项目管理向数字化转型
  4. 关于feign调用时,session丢失的解决方案
  5. Openlayers中使用animate实现车辆定位导航效果(以当前车辆为中心移动)
  6. Qt修炼手册5_文件输入输出
  7. java程序中没有错,但是项目上面显示一个红叉的解决办法
  8. 虚拟机Ubuntu开机后提示:无法应用原保存的显示器配置(屏幕显示问题)
  9. iOS调用系统相册、相机 显示中文标题
  10. 微服务架构案例(02):业务架构设计,系统分层管理
  11. 文件操作fstream
  12. 优先级队列实现php,带优先级的队列 - PHP实现
  13. JS_模拟广告栏跟随效果
  14. python做人工智能-马哥教育官网-专业Linux培训班,Python培训机构
  15. Woderwate-Intouch驱动(包括施耐德,西门子,AB等的DASever、IOServer)
  16. 《商标与商号法律制度冲突问题研究报告》发布
  17. 接口用例设计从哪些方面考虑
  18. 想参加IT培训,了解到达内、蜗牛学院、优就业、黑马、善知教育等机构,哪家比较好?
  19. Delphi图像处理 -- 彩色浮雕
  20. 为什么国内搜索不到国外服务器网站?

热门文章

  1. 有序链表转换二叉搜索树Python解法
  2. vs2013 未将对象引用设置到对象的实例
  3. mysql myisam 去掉表锁a_MyISAM表锁的解决方案
  4. u9系统的使用方法仓库_新风系统如何使用 新风系统使用方法介绍【图文】
  5. mysql如何植入到oracle_MySQL产品的生命周期
  6. pandas输出列名_pandas中的DataFrame按指定顺序输出所有列的方法
  7. 工业机器人焊钳制作_一种工业焊接机器人及其冷却装置的制作方法
  8. 单模光纤和多模光纤的区别_多模光纤和单模光纤的区别与应用
  9. 基于FPGA的ADC数据采集蓝牙传输系统
  10. 基于VHDL的可变速彩灯控制器的设计