<?php

header("content-type:text/html;charset=utf-8");

$testArr = array();
$time1 = microtime(true);
$testArr = range(1, 10);
$dataLen = count($testArr);
shuffle($testArr);
echo '生成并打乱数组花费时间为:'.(microtime(true) - $time1).'<br>';
//1.冒泡排序
$time1 = microtime(true);
mpsort($testArr);
echo '冒泡排序运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'<br>';
//2.简单排序
$time1 = microtime(true);
simpleSort($testArr);
echo '简单排序运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'<br>';
//3.插入排序
$time1 = microtime(true);
insertSort($testArr);
echo '插入排序运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'<br>';
//4.希尔排序
$time1 = microtime(true);
$memory1 = memory_get_usage(true);
sellSort($testArr);
$maxMemory = memory_get_peak_usage(true);
echo '希尔排序运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'分配存储空间为:'.(memory_get_usage(true) - $memory1).'峰值为:'.$maxMemory.'<br>';
//5.快速排序
$time1 = microtime(true);
$memory1 = memory_get_usage(true);
testQuickSort($testArr);
$maxMemory = memory_get_peak_usage(true);
echo '快速排序运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'分配存储空间为:'.(memory_get_usage(true) - $memory1).'峰值为:'.$maxMemory.'<br>';
//6.快速排序(调用函数)
$time1 = microtime(true);
$memory1 = memory_get_usage(true);
testQuickSort2($testArr);
$maxMemory = memory_get_peak_usage(true);
echo '快速排序(调用函数)'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'分配存储空间为:'.(memory_get_usage(true) - $memory1).'峰值为:'.$maxMemory.'<br>';
//内置函数
$time1 = microtime(true);
sort($testArr);
$maxMemory = memory_get_peak_usage(true);
echo '内置函数运行'.$dataLen.'次花费时间为:'.(microtime(true) - $time1).'分配存储空间为:'.(memory_get_usage(true) - $memory1).'峰值为:'.$maxMemory.'<br>';
//冒泡排序
function mpsort($testArr){ echo '冒泡排序:<br>';
echo '排序前:';
iteratorArr($testArr);
$dataLen = count($testArr);
for($i=0;$i<$dataLen-1;$i++){
for($j=0;$j<$dataLen-1-$i;$j++){ if($testArr[$j] > $testArr[$j+1]){
$maxVal = $testArr[$j];
$testArr[$j] = $testArr[$j+1];
$testArr[$j+1]= $maxVal;
} }
} echo '排序后:';
iteratorArr($testArr);
} //选择排序(简单排序)
function simpleSort($testArr){
echo '简单排序:<br>';
echo '排序前:';
iteratorArr($testArr);
$dataLen = count($testArr);
$index = 0;
$minVal = 0;
for($i=0;$i<$dataLen;$i++){
$index = $i;
for($j=$i;$j<$dataLen;$j++){
if($testArr[$index] > $testArr[$j]) $index = $j;
} $minVal = $testArr[$index];
$testArr[$index] = $testArr[$i];
$testArr[$i] = $minVal;
} echo '排序后:';
iteratorArr($testArr);
} //插入排序
function insertSort($testArr){
echo '插入排序:<br>';
echo '排序前:';
iteratorArr($testArr); $dataLen = count($testArr);
$index = 0;
$tmp = 0;
//print_r($testArr);
for($i=1;$i<$dataLen;$i++){ if($testArr[$i-1] < $testArr[$i]) continue;
$index = $i;
while($index >=1 && $testArr[$index] < $testArr[$index-1]){
soapArr($testArr , $index , $index-1);
$index--;
}
} echo '排序后:';
iteratorArr($testArr);
} //希尔排序
function sellSort($testArr){
echo '希尔排序:<br>';
echo '排序前:';
iteratorArr($testArr); $dataLen = count($testArr);
$index = 0;
$tmp = 0;
$increment = intval($dataLen/2); for($k =$increment; $k>=1 ;$k--){ for($i=$k;$i<$dataLen;$i += $k){ if($testArr[$i-$k] < $testArr[$i]) continue;
$index = $i;
while($index >=1 && $testArr[$index] < $testArr[$index-$k]){
//soapArr($testArr , $index , $index-$k);
$tmp = $testArr[$index];
$testArr[$index] = $testArr[$index-$k];
$testArr[$index-$k] = $tmp;
$index-=$k;
} } } echo '排序后:';
iteratorArr($testArr);
} function testQuickSort($testArr){
echo '快速排序:<br>';
echo '排序前:';
iteratorArr($testArr); quickSort($testArr , 0 , count($testArr)); echo '排序后:';
iteratorArr($testArr);
} //快速排序
function quickSort(&$testArr , $start , $end){ $index = $start+1;
if($index > $end) return $testArr;
$tmp = 0;
$compareVal = $testArr[$start];
for($i=$index;$i<$end;$i++){ if($testArr[$i] < $compareVal){
//soapArr($testArr , $index , $i);
$tmp = $testArr[$index];
$testArr[$index] = $testArr[$i];
$testArr[$i] = $tmp;
$index++;
}
} //soapArr($testArr , $start , $index-1);
$tmp = $testArr[$start];
$testArr[$start] = $testArr[$index-1];
$testArr[$index-1] = $tmp;
quickSort($testArr , $start , $index-1);
quickSort($testArr, $index, $end);
} //快速排序
function quickSort2(&$testArr , $start , $end){ $index = $start+1;
if($index > $end) return $testArr;
$tmp = 0;
$compareVal = $testArr[$start];
for($i=$index;$i<$end;$i++){ if($testArr[$i] < $compareVal){
soapArr($testArr , $index , $i);
$index++;
}
} soapArr($testArr , $start , $index-1); quickSort2($testArr , $start , $index-1);
quickSort2($testArr, $index, $end);
} function testQuickSort2($testArr){
echo '快速排序(调用函数):<br>';
echo '排序前:';
iteratorArr($testArr); quickSort($testArr , 0 , count($testArr)); echo '快速排序(调用函数)';
iteratorArr($testArr);
} //交换数组
function soapArr(&$arr , $a , $b){
$tmp = $arr[$a];
$arr[$a] = $arr[$b];
$arr[$b] = $tmp;
} //遍历器
function iteratorArr($arr){ foreach($arr as $v){
echo $v."\n\r";
}
echo "<br>";
}

php实现基础排序算法的更多相关文章

  1. Java面试宝典系列之基础排序算法

    本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...

  2. php四种基础排序算法的运行时间比较

    /** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...

  3. Java基础系列--基础排序算法

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9082138.html 一.概述 基础排序算法包括:桶排序.冒泡排序.选择排序.插入排序等 ...

  4. 6种基础排序算法java源码+图文解析[面试宝典]

    一.概述 作为一个合格的程序员,算法是必备技能,特此总结6大基础算法.java版强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步:1.思想2.图 ...

  5. php四种基础排序算法的运行时间比较!

    /** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...

  6. 十大基础排序算法[java源码+动静双图解析+性能分析]

    一.概述 作为一个合格的程序员,算法是必备技能,特此总结十大基础排序算法.java版源码实现,强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步: ...

  7. 基础排序算法之快速排序(Quick Sort)

    快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序.同时如果随机选取中心枢(pivot),它也是一个随机算法.最重要的是,快速排 ...

  8. 基础排序算法之并归排序(Merge Sort)

    并归排序是学习分治法 (Merge Sort) 的好例子.而且它相对于选择,插入,冒泡排序来说,算法性能有一定提升.我首先会描述要解决的问题,并给出一个并归排序的例子.之后是算法的思路以及给出伪代码. ...

  9. ZH奶酪:【数据结构与算法】基础排序算法总结与Python实现

    1.冒泡排序(BubbleSort) 介绍:重复的遍历数列,一次比较两个元素,如果他们顺序错误就进行交换. 2016年1月22日总结: 冒泡排序就是比较相邻的两个元素,保证每次遍历最后的元素最大. 排 ...

  10. 612.1.004 ALGS4 | Elementary Sorts - 基础排序算法

    sublime编辑器写代码,命令行编译 减少对ide的依赖//可以提示缺少什么依赖import 所有示例代码动手敲一遍 Graham's Scan是经典的计算几何算法 shffule 与 map-re ...

随机推荐

  1. 什么是StatefulSet

    简单说来,StatefulSet其实就是一种升级版的Deployment,大体工作原理如下 1.为每个Pod名字按顺序编号,按顺序启动 # kubectl get po -o wide -l app= ...

  2. SpringCloud的入门学习之概念理解、Feign负载均衡入门

    1.Feign是SpringCloud的一个负载均衡组件. Feign是一个声明式WebService客户端.使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口, ...

  3. python爬虫网页解析之lxml模块

    08.06自我总结 python爬虫网页解析之lxml模块 一.模块的安装 windows系统下的安装: 方法一:pip3 install lxml 方法二:下载对应系统版本的wheel文件:http ...

  4. Business Model Design 业务模型设计

    Note This section is split into two parts, which describe the use of two different Object-relational ...

  5. 激活windows操作系统的命令行指令

    1.开始菜单中搜索命令提示符,右键管理员运行 2.为了避免激活的失败,首先卸载已经过期的密钥 输入以下命令:slmgr.vbs /upk 回车确认之后会弹出提示“已成功卸载了产品密钥” 3.下一步是将 ...

  6. Flask报如下错误:SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.

    在同一个项目中由于flask_sqlalchemy版本不同,有时会报如下错误 错误信息如下: flask_sqlalchemy\__init__.py:: UserWarning: SQLALCHEM ...

  7. Django源码安装xadmin报错Apps aren't loaded yet.

    环境:python2.7, django1.9 1.报错django.core.exceptions.AppRegistryNotReady:Apps aren't loaded yet.如下图所示: ...

  8. 《Web Development with Go》实现一个简单的rest api

    设计模式完了之后,应该实现具体的应用了. 设计模式还得没事就要复习. web应用,学习的是网上的一本书. <Web Development with Go> package main im ...

  9. 201871010102-常龙龙《面向对象程序设计(java)》第十三周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  10. Win32 程序开发:创建一个应用程序窗口

    一.创建一个应用程序窗口 代码如下: // 头文件 #include <windows.h> // 全局变量 WCHAR g_lpszClassName[] = L"CLASSN ...