php四种基础排序算法的运行时间比较
/**
* php四种基础排序算法的运行时间比较
* @authors Jesse (jesse152@163.com)
* @date 2016-08-11 07:12:14
*/
//冒泡排序法
function bubbleSort($array){
$temp = 0;
for($i = 0;$i < count($array) -1;$i++){
for($j = 0;$j < count($array) - 1 -$i;$j++){
if($array[$j] > $array[$j+1]){ //从小到大排列
$temp = $array[$j];
$array[$j] = $array[$j+1];
$array[$j+1] = $temp;
}
}
}
}
//选择排序法
function selectSort($array){
$temp = 0;
for($i = 0;$i < count($array) - 1;$i++){
$minVal = $array[$i]; //假设$i就是最小值
$minValIndex = $i;
for($j = $i+1;$j < count($array);$j++){
if($minVal > $array[$j]){ //从小到大排列
$minVal = $array[$j]; //找最小值
$minValIndex = $j;
}
}
$temp = $array[$i];
$array[$i] = $array[$minValIndex];
$array[$minValIndex] = $temp;
}
}
//插入排序法
function insertSort($array){ //从小到大排列
//先默认$array[0],已经有序,是有序表
for($i = 1;$i < count($array);$i++){
$insertVal = $array[$i]; //$insertVal是准备插入的数
$insertIndex = $i - 1; //有序表中准备比较的数的下标
while($insertIndex >= 0 && $insertVal < $array[$insertIndex]){
$array[$insertIndex + 1] = $array[$insertIndex]; //将数组往后挪
$insertIndex--; //将下标往前挪,准备与前一个进行比较
}
if($insertIndex + 1 !== $i){
$array[$insertIndex + 1] = $insertVal;
}
}
}
//快速排序法
function quickSort($array){
if(!isset($array[1]))
return $array;
$mid = $array[0]; //获取一个用于分割的关键字,一般是首个元素
$leftArray = array();
$rightArray = array();
foreach($array as $v){
if($v > $mid)
$rightArray[] = $v; //把比$mid大的数放到一个数组里
if($v < $mid)
$leftArray[] = $v; //把比$mid小的数放到另一个数组里
}
$leftArray = quickSort($leftArray); //把比较小的数组再一次进行分割
$leftArray[] = $mid; //把分割的元素加到小的数组后面,不能忘了它哦
$rightArray = quickSort($rightArray); //把比较大的数组再一次进行分割
return array_merge($leftArray,$rightArray); //组合两个结果
}
$a = array_rand(range(1,3000), 1600); //生成1600个元素的随机数组
shuffle($a); //打乱数组的顺序
$t1 = microtime(true);
bubbleSort($a); //冒泡排序
$t2 = microtime(true);
echo "冒泡排序用时:".(($t2-$t1)*1000).'ms'."\n";
$t3 = microtime(true);
selectSort($a); //选择排序
$t4 = microtime(true);
echo "选择排序用时:".(($t4-$t3)*1000).'ms'."\n";
$t5 = microtime(true);
insertSort($a); //插入排序
$t6 = microtime(true);
echo "插入排序用时:".(($t6-$t5)*1000).'ms'."\n";
$t7 = microtime(true);
quickSort($a); //快速排序
$t8 = microtime(true);
echo "快速排序用时:".(($t8-$t7)*1000).'ms';
php四种基础排序算法的运行时间比较的更多相关文章
- php四种基础排序算法的运行时间比较!
/** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...
- PHP四种基本排序算法
PHP的四种基本排序算法为:冒泡排序.插入排序.选择排序和快速排序. 下面是我整理出来的算法代码: 1. 冒泡排序: 思路:对数组进行多轮冒泡,每一轮对数组中的元素两两比较,调整位置,冒出一个最大的数 ...
- 6种基础排序算法java源码+图文解析[面试宝典]
一.概述 作为一个合格的程序员,算法是必备技能,特此总结6大基础算法.java版强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步:1.思想2.图 ...
- PHP实现四种基本排序算法
前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思 ...
- PHP 四种基本排序算法的代码实现
前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思 ...
- PHP——四种基本排序算法
分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思路分析 ...
- php 四种基础排序
1. 冒泡排序算法 * 思路分析:法如其名,就是像冒泡一样,每次从数组当中 冒一个最大的数出来. * 比如:2,4,1 // 第一次 冒出的泡是4 * ...
- php -- 四种基础排序:冒泡、选择、插入、快速
冒泡排序 思路分析:法如其名,就是像冒泡一样,每次从数组当中 冒一个最大的数出来. 第一轮:从第一个到最后一个冒泡比较,运行结果:最后一个最大 第二轮:从第一个到倒数第二个冒泡比较, 运行结果:最后一 ...
- PHP实现四种基本排序算法 得多消化消化
1.冒泡排序 // 冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序 ...
随机推荐
- Introdution to 3D Game Programming With DirectX11 第11章 习题解答
11.1 这道题要注意使用了line strip,由于曾经一直用triangle list,所以在几何渲染的时候easy算错定点描绘的顺序. 贴一些代码,大概就能把这个问题解释清楚了,由于框架还不是特 ...
- GNU bash实现机制与源代码简析
http://www.cnblogs.com/napoleon_liu/archive/2011/04/01/2001886.html http://blog.csdn.net/ruglcc/arti ...
- 应聘.net开发工程师常见的面试题(一)(转载)
1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...
- Cocoa与Cocoa Touch的区别
Cocoa是在Mac OS X系统上原生的一个编译环境.他包含两个框架,其实就是一系列的类库,Foundation和AppKit. 在你的iPhone等掌上设备上,使用的则是他的一个子类 - Coco ...
- How to Map Distinct Value Types Using Java Generics--reference
原文:http://www.codeaffine.com/2015/03/04/map-distinct-value-types-using-java-generics/ Occasionally t ...
- Overview & Change Log
Overview & Change Log Nova Framework is a PHP 5.5+ MVC Framework. It's designed to be lightweigh ...
- oracle字段类型
oracle 字段类型CHAR 固定长度字符串 最大长度2000 bytes VARCHAR2 可变长度的字符串 最大长度4000 byt ...
- 多线程NSOperation
NSOperation(经常使用): 1.为什么会有NSOperation?弥补gcd的一些问题:1)下载为例子:如果gcd放到队列中的block操作面对网络有问题,block之外无法取消bloc ...
- [转]Oracle字符串拼接的方法
本文转自:http://www.blogjava.net/liuwuping12064915/archive/2011/06/27/353096.html 和其他数据库系统类似,Oracle字符串连接 ...
- SICP的一些练习题
1.3 较大两个数之和 (define (MaxSum x y z) (+ (cond ((or (> x y) (> x z)) x) ()) (cond ((or (> y x) ...