php实现基础排序算法
<?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实现基础排序算法的更多相关文章
- Java面试宝典系列之基础排序算法
本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...
- php四种基础排序算法的运行时间比较
/** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...
- Java基础系列--基础排序算法
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9082138.html 一.概述 基础排序算法包括:桶排序.冒泡排序.选择排序.插入排序等 ...
- 6种基础排序算法java源码+图文解析[面试宝典]
一.概述 作为一个合格的程序员,算法是必备技能,特此总结6大基础算法.java版强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步:1.思想2.图 ...
- php四种基础排序算法的运行时间比较!
/** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...
- 十大基础排序算法[java源码+动静双图解析+性能分析]
一.概述 作为一个合格的程序员,算法是必备技能,特此总结十大基础排序算法.java版源码实现,强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步: ...
- 基础排序算法之快速排序(Quick Sort)
快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序.同时如果随机选取中心枢(pivot),它也是一个随机算法.最重要的是,快速排 ...
- 基础排序算法之并归排序(Merge Sort)
并归排序是学习分治法 (Merge Sort) 的好例子.而且它相对于选择,插入,冒泡排序来说,算法性能有一定提升.我首先会描述要解决的问题,并给出一个并归排序的例子.之后是算法的思路以及给出伪代码. ...
- ZH奶酪:【数据结构与算法】基础排序算法总结与Python实现
1.冒泡排序(BubbleSort) 介绍:重复的遍历数列,一次比较两个元素,如果他们顺序错误就进行交换. 2016年1月22日总结: 冒泡排序就是比较相邻的两个元素,保证每次遍历最后的元素最大. 排 ...
- 612.1.004 ALGS4 | Elementary Sorts - 基础排序算法
sublime编辑器写代码,命令行编译 减少对ide的依赖//可以提示缺少什么依赖import 所有示例代码动手敲一遍 Graham's Scan是经典的计算几何算法 shffule 与 map-re ...
随机推荐
- ASP.NET MVC5基础 – MVC文件架构
创建MVC项目 首先,我们使用Visual Studio2019创建一个MVC架构的应用程序.步骤如下:首先打开VS2019,在启动页选择[创建新项目].然后选择创建 ASP.NET Web 应用程序 ...
- Emoji 映射编码
Emoji官网:https://emojipedia.org/ Name Unified DoCoMo KDDI Softbank Google Wechat black sun with r ...
- 资深程序员告诉你为什么要用Python3而不是Python2
经常遇到这样的问题:<现在开始学习python的话,是学习python2.x还是学习python3.x比较好?>,这也是许多初学者会遇到的问题,我们的答案是python 3.x. 为了帮助 ...
- PlayJava Day016
今日所学: /* 2019.08.19开始学习,此为补档. */ 数组 1.一维数组:数据类型[ ] 变量名 = new 数据类型[长度] 获取长度:array.length 在使用下标时确保不超过a ...
- PHP简单判断当前使用的是什么浏览器
PHP简单判断当前使用的是什么浏览器,判断浏览器类型的方法,方便统计网站访问用户使用浏览器的比例. 判断浏览器类型方法 function userBrowser() { $user_OSagent = ...
- CSS学习笔记-2D转换模块
2D转换模块: 1.旋转 1.1格式: transform:rotate(45deg); 1.2含义: 表示旋转多少度 ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之十:为SQL Server配置Always On
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 【React Native】进阶指南之一(特定平台、图片加载、动画使用)
一.特定平台代码 React Native提供了两种方法来区分平台: 使用Platform模块: 使用特定平台扩展名: 1.Platform模块 React Native提供了一个检测当前运行平台的模 ...
- 多线程之NSOpertionQueue操作队列
//NSOpertionQueue NSOperation //Queue //主队列 和 自定义队列 //主队列是运行在主线程当中,自定义队列运行在后台 //NSOperation 定义需要执行的操 ...
- 26-限制容器对CPU的使用
默认设置下,所有容器可以平等地使用 host CPU 资源并且没有限制. Docker 可以通过 -c 或 --cpu-shares 设置容器使用 CPU 的权重.如果不指定,默认值为 1024. 与 ...