PHP--冒泡、选择、插入排序法
使用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--冒泡、选择、插入排序法的更多相关文章
- Java 快速排序法 冒泡排序法 选择排序法 插入排序法
1.快速排序的原理: 选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的). 从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果 ...
- c语言:简单排序:冒泡排序法、选择排序法、插入排序法(待写)
1.冒泡排序法: 假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个和第三个,再交换,直到第n-1 ...
- php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法
这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程. 充效率看 冒泡排序法<选择排序法<插入排序法 排序分两大类: 内部排序法 交换式 ...
- c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法
本文详细叙述和实现了快速排序算法,冒泡排序 选择排序 插入排序比较简单,原理在这里不再详述,直接用代码进行了实现. 快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定), ...
- 基于python语言的经典排序法(冒泡法和选择排序法)
前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...
- 选择排序法、冒泡排序法、插入排序法、系统提供的底层sort方法排序之毫秒级比较
我的代码: package PlaneGame;/** * 选择排序法.冒泡排序法.插入排序法.系统提供的底层sort方法排序之毫秒级比较 * @author Administrator */impo ...
- C# 冒泡排序法、插入排序法、选择排序法
冒泡排序法 是数组等线性排列的数字从大到小或从小到大排序. 以从小到大排序为例. 数据 11, 35, 39, 30, 7, 36, 22, 13, 1, 38, 26, 18, 12, 5, 45, ...
- python 数据结构与算法之排序(冒泡,选择,插入)
目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...
- python 中的一些基础算法:递归/冒泡/选择/插入
递归算法 如果一个函数包含了对自己的调用,那么这个函数就是递归的. 比如我们计算下1-7乘法的计算: def func(n): if n ==1 : return 1 return n*func(n- ...
随机推荐
- tcp/udp高并发和高吐吞性能测试工具
在编写一个网络服务的时候都比较关心这个服务能达到多少并发连接,而在这连接的基础上又能达到一个怎样的交互能力.编写服务已经是一件很花力气的事情,而还要去编写一个能够体现结果的测试工具就更加消耗工作时间. ...
- Yii2 使用Composer
composer 是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件 compo ...
- MySql学习(MariaDb)
资料 http://www.cnblogs.com/lyhabc/p/3691555.html http://www.cnblogs.com/lyhabc/p/3691555.html MariaDb ...
- 算法:POJ1008 Maya Calendar
此题非常水,不做说明. package practice; import java.io.BufferedInputStream; import java.util.Scanner; /** * @a ...
- node(websocket)
websocket原本是html5下实现长链接的一个特性,当前已被众多浏览器支持. 在websocket协议中,首先通过http交换一次握手,明确将协议升级至websocket.同时建立一个TCP通道 ...
- java提高篇(十四)-----字符串
可以证明,字符串操作是计算机程序设计中最常见的行为. 一.String 首先我们要明确,String并不是基本数据类型,而是一个对象,并且是不可变的对象.查看源码就会发现String类为f ...
- [ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG
引言:硬件中的看门狗,不是门卫的意思,而是一只很凶的狗!如果你不按时喂它,它就会让系统重启!这反而是我们想要的功能~ 1.看门狗概述 看门狗定时器(WDT,Watch Dog Timer)是单片机的一 ...
- 写js写傻了,明天研究一下异步
在html某元素上绑定一个click事件,该事件是一个执行事件很长的函数,比如执行几十亿或几百亿次加法,那么在这个函数执行的过程中,其他元素绑定的事件,是如何触发的呢,异步触发还是同步,触发时是怎么执 ...
- 缓存篇(Cache)~第二回 使用static静态成员实现服务器端缓存(导航面包屑)~续
返回目录 在写完首篇cache文章后,有些朋友给我来信,希望可以使用JS的方法来实现这个导航功能,所以,才有了这篇文章,JS与C#不同,它虽然有引用类型,但它不具备一些引用类型的特性,如它的方法参数为 ...
- Bootstrap~Panel和Table
回到目录 在我们对一个页面进行设计时,分块是必须的,没有一个网站是一栏而下的,除非你是在看小说,否则你的页面设计一定是分块的,即它由于多个panel组件,在bootstrap里叫到栅格系统,而在每行每 ...