使用php来实现常用三种排序方法:

冒泡、选择、插入中,最优的是插入排序,我就把插入排序的流程画下来了:

插入排序法的流程图:

插入排序的代码:

function InsertSort(&$arr){
for ($i=1;$i<count($arr);$i++){
// 带插入的值
$insertVal = $arr[$i];
// 要比较的位置下标
$insertIndex = $i -1;
while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
// 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移
$arr[$insertIndex+1] = $arr[$insertIndex];
$insertIndex--;
}
// 插入insertVal
if($insertIndex+1 != $i){
$arr[$insertIndex+1] = $insertVal;
}
}
}

下面的三种排序法的代码:

 <?php
 /**
* Created by PhpStorm.
* User: xxx
* Date: 2016/10/12
* Time: 21:38
*/
// 冒泡排序法
function maopao_sort(&$arr){
// 外循环 控制趟数 只需要count($arr)-1趟就可以完成排序
for($i=0;$i<count($arr)-1;$i++){
// 内循环控制每一趟,找出最大的那个数:ccount($arr)-1-$i
for($j=0;$j<count($arr)-1-$i;$j++){
if ($arr[$j] > $arr[$j+1]){
$temp = $arr[$j+1];
$arr[$j+1] = $arr[$j];
$arr[$j] = $temp;
}
}
}
} //选择排序法
function SelectSort(&$arr){
for($i=0;$i<count($arr)-1;$i++){
// 假设的最小数
$minVal = $arr[$i];
//最小数的下标
$minIndex = $i;
for($j=$i+1;$j<count($arr);$j++){
if ($minVal>$arr[$j]){
$minVal = $arr[$j];
$minIndex = $j;
}
}
if ($i != $minIndex){
$temp = $arr[$i];
$arr[$i] = $minVal;
$arr[$minIndex] = $temp;
}
}
} // 插入排序法(小-->大)
function InsertSort(&$arr){
for ($i=1;$i<count($arr);$i++){
// 带插入的值
$insertVal = $arr[$i];
// 要比较的位置下标
$insertIndex = $i -1;
while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
// 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移
$arr[$insertIndex+1] = $arr[$insertIndex];
$insertIndex--;
}
// 插入insertVal
if($insertIndex+1 != $i){
$arr[$insertIndex+1] = $insertVal;
}
}
} $arr = array(10,2,0,-23,90,-100,400);
//maopao_sort($arr);
//SelectSort($arr);
InsertSort($arr);
echo var_dump($arr)."<br>";
print_r($arr);

快速排序法:

 <?php
function quickSort(&$arr){
if(count($arr)>1){
$k=$arr[0];
$x=array();
$y=array();
$_size=count($arr);
for($i=1;$i<$_size;$i++){
if($arr[$i]<=$k){
$x[]=$arr[$i];
}elseif($arr[$i]>$k){
$y[]=$arr[$i];
}
}
$x=quickSort($x);
$y=quickSort($y);
return array_merge($x,array($k),$y);
}else{
return$arr;
}
}
?>

PHP--冒泡、选择、插入排序法的更多相关文章

  1. Java 快速排序法 冒泡排序法 选择排序法 插入排序法

    1.快速排序的原理: 选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的). 从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果 ...

  2. c语言:简单排序:冒泡排序法、选择排序法、插入排序法(待写)

    1.冒泡排序法: 假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个和第三个,再交换,直到第n-1 ...

  3. php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

    这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程. 充效率看 冒泡排序法<选择排序法<插入排序法 排序分两大类: 内部排序法 交换式 ...

  4. c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法

    本文详细叙述和实现了快速排序算法,冒泡排序 选择排序 插入排序比较简单,原理在这里不再详述,直接用代码进行了实现. 快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定), ...

  5. 基于python语言的经典排序法(冒泡法和选择排序法)

    前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...

  6. 选择排序法、冒泡排序法、插入排序法、系统提供的底层sort方法排序之毫秒级比较

    我的代码: package PlaneGame;/** * 选择排序法.冒泡排序法.插入排序法.系统提供的底层sort方法排序之毫秒级比较 * @author Administrator */impo ...

  7. C# 冒泡排序法、插入排序法、选择排序法

    冒泡排序法 是数组等线性排列的数字从大到小或从小到大排序. 以从小到大排序为例. 数据 11, 35, 39, 30, 7, 36, 22, 13, 1, 38, 26, 18, 12, 5, 45, ...

  8. python 数据结构与算法之排序(冒泡,选择,插入)

    目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...

  9. python 中的一些基础算法:递归/冒泡/选择/插入

    递归算法 如果一个函数包含了对自己的调用,那么这个函数就是递归的. 比如我们计算下1-7乘法的计算: def func(n): if n ==1 : return 1 return n*func(n- ...

随机推荐

  1. 如何实现:录制视频聊天的全过程? 【低调赠送:QQ高仿版GG 4.3 最新源码】

    前段时间做个项目,客户需要将视频对话的整个过程录制下来,这样,以后就可以随时观看.想来录制整个视频聊天的过程这样的功能应该是个比较常见的需求,比如,基于网络语音视频的1:1的英语口语辅导,如果能将辅导 ...

  2. Wix 安装部署教程(十二) -- 自动更新WXS文件

    上一篇分享了一个QuickWIX,用来对比两个工程前后的差异,但是这样还是很繁琐,而且昨天发现有Bug,目录对比有问题.这次改变做法,完全让程序自动去更新WXS文件,然后再用CCNet去自动编译,这样 ...

  3. [异常解决] 安卓6.0权限问题导致老蓝牙程序出现异常解决办法:Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission...

    一.问题: 之前写的一款安卓4.4的应用程序,用来连接蓝牙BLE,而现在拿出来用新的AS编译(此时SDK为6.0,手机也是6.0)应用程序并不能搜索到蓝牙,查看log总是报权限错误: Need ACC ...

  4. [专业名词·硬件] 2、DC\DC、LDO电源稳压基本常识(包含基本原理、高效率模块设计、常见问题、基于nRF51822电源管理模块分析等)·长文

    综述先看这里 第一节的1.1简单介绍了DC/DC是什么: 第二节是关于DC/DC的常见的疑问答疑,非常实用: 第三节是针对nRF51822这款芯片电源管理部分的DC/DC.LDO.1.8的详细分析,对 ...

  5. node.js1

    node的helloworld是非常的简单. 下载node绿色安装包即可.转至node.exe所在目录——写一个hw.js,然后cmd下执行node hw.js——返回相应结果.. http://ww ...

  6. Zabbix安装部署

    zabbix服务器端配置:(10.27.98.29服务器端) 1.安装lamp环境 yum -y install autoconf curl-devel gcc gcc-c++ httpd httpd ...

  7. iOS----------使用 Xcode6或Xcode7配置.pch文件

    刚上手 Xcode6/Xcode7 的人,总会发现之前在 6 之前常常会在“利用名-Prefix.pch”这个文件中来配置我们全局要用到的头文件,但是 xcode6 没有了,人家说,这类东西有时候也会 ...

  8. ASP.NET MVC的Action拦截器(过滤器)ActionFilter

    有时项目要进行客户端请求(action)进行拦截(过滤)验证等业务,可以使用拦截器进行实现,所谓的action拦截器也没有什么的,只是写一个类,继承另一个类(System.Web.Mvc.Filter ...

  9. 每天一个linux命令(29):chgrp命令

    在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是change group的 ...

  10. SSIS package 更新 variable

    在Package中声明一个variable,在package运行的过程中,SSIS如何update Variable? 第一种方法:使用 Script Task 来更新Variable的值 1,创建一 ...