<?php
//冒泡排序
//原理:从倒数第一个数开始,相邻的两个数比较,后面比前面的小,则交换位置,一直到比较第一个数之后则最小的会排在第一位,以此类推
function bubble_sort($arr){
$count = count($arr);
for($i=0; $i<$count; $i++){
for($j=$count-1; $j>$i; $j--){
if($arr[$j]<$arr[$j-1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}
}
}
return $arr;
}
//快速排序
function quick_sort($arr){
$count = count($arr);
if($count<=1)return $arr;
$key = $arr[0];
$l = array();
$r = array();
for($i=1;$i<$count;$i++){
if($arr[$i]<=$key){
$l[] = $arr[$i];
}else{
$r[] = $arr[$i];
}
}
$l = quick_sort($l);
$r = quick_sort($r);
return array_merge($l,array($key),$r); }
//选择排序
//原理:利用数组的key,假设数组的第一个key[0]为最小的,和后面的数比较,如果key[0]大于后面的数则存起来key,比较完之后(比较到数组的最后一个),如果key[0]!=存起来的key,则交换他们的key. 以此类推, 然后再从第二个key[1]去和后面的比较
function select_sort($arr){
$count = count($arr);
for($i=0;$i<$count;$i++){
$k = $i;
for($j=$i+1;$j<$count;$j++){
if($arr[$j]<$arr[$k]){
$k = $j;
}
}
if($k != $i){
$tmp = $arr[$k];
$arr[$k] = $arr[$i];
$arr[$i] = $tmp;
}
}
return $arr;
}
//插入排序
//原理:假设一堆数字都排好序了,[6,7,8] 现在给你一个9让你插进去,这个时候9和8比大,就放到8后面就行了,[6,7,8,9],因为一堆数字排好序了, 前面的肯定都比8小, 所以就不用和前面的比较了.
function insert_sort($arr){
$count = count($arr);
for($i=1; $i<$count; $i++){
$tmp = $arr[$i];
$j = $i-1;
while($arr[$j]>$tmp){
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
$j--;
if($j<0){
break;
}
}
}
return $arr;
}
//打印结果
function display($function,$a){
$t1 = microtime(true);
$arr = $function($a);
$t2 = microtime(true);
// print_r($arr);
return $t2-$t1;
}
//随机产生1600长度数组;
$a = array_rand(range(1,2000),1600);
//打乱数组
shuffle($a);
echo "<pre>"; echo '冒泡排序 ',display('bubble_sort',$a),'</br>'; echo '快速排序 ',display('quick_sort',$a),'</br>'; echo '选择排序 ',display('select_sort',$a),'</br>'; echo '插入排序 ',display('insert_sort',$a),'</br>';

PHP算法排序之快速排序、冒泡排序、选择排序、插入排序性能对比的更多相关文章

  1. php 实现冒泡算法排序、快速排序、选择排序,插入排序

    许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要 ...

  2. 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)

    2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...

  3. python算法(一)基本知识&冒泡排序&选择排序&插入排序

    本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...

  4. 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较

    2.3 归并排序 接口定义: int merge(void* data, int esize, int lpos, int dpos, int rpos, int (*compare)(const v ...

  5. [Swift]八大排序算法(三):选择排序 和 简单选择排序

    排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...

  6. C语言实现 冒泡排序 选择排序 希尔排序

    // 冒泡排序 // 选择排序 // 希尔排序 // 快速排序 // 递归排序 // 堆排序 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h& ...

  7. C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

    C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...

  8. 排序系列 之 简单选择排序及其改进算法 —— Java实现

    简单选择排序算法: 基本思想: 在待排序数据中,选出最小的一个数与第一个位置的数交换:然后在剩下的数中选出最小的数与第二个数交换:依次类推,直至循环到只剩下两个数进行比较为止. 实例: 0.初始状态 ...

  9. 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现

    选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...

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

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

随机推荐

  1. 深入Golang调度器之GMP模型

    前言 随着服务器硬件迭代升级,配置也越来越高.为充分利用服务器资源,并发编程也变的越来越重要.在开始之前,需要了解一下并发(concurrency)和并行(parallesim)的区别. 并发:  逻 ...

  2. 图解Metrics, tracing, and logging

    Logging,Metrics 和 Tracing   最近在看Gophercon大会PPT的时候无意中看到了关于Metrics,Tracing和Logging相关的一篇文章,凑巧这些我基本都接触过, ...

  3. 最近Android真的凉凉了?

    都说Android最近行情不好,很多人都遇到瓶颈或放弃或转行.其实这种情况15年16年也是如此,相对比之下,个人认为今年比去年好多了,Android接下来将会走向复苏的春天. 自从Google开始推出 ...

  4. mvn tomcat7:help的14个命令

    D:\2018\code\XXX>mvn tomcat7:help [INFO] Scanning for projects... [INFO] [INFO] ----------------- ...

  5. Oracle 高水位说明和释放表空间,加快表的查询速度

    高水位的介绍 数据库运行了一段时间,经过一些列的删除.插入.更改操作有些表的高水位线就有可能和实际的表存储数据的情况相差特别多,为了提高检索该表的效率,建议对这些表进行收缩: 查找高水位线的表 查找表 ...

  6. Confluence 6 Cron 表达式

    一个 cron 表达式是以 6-7 时间字段来定义一个计划任务是如何按照时间被执行的.每一个字段中的数据库而已为数字或者是一些特定的字符串来进行表达.每一个字段是使用空格或者 tab 进行分隔的. 下 ...

  7. nginx官方模块之http_random_index_module

    作用 目录中选择一个随机主页 语法

  8. Java编制至今总结和学习报告

    日期:2018.8.19 星期日 博客期:006 说个事,本来想把博客园做一个交流平台的,可是交流度有点少...嗯...我看我还是把这个平台当作经验传授平台和自己的作品发布平台吧!Java的知识详解, ...

  9. 手机端rem 用法

    !function(n){ var e=n.document, t=e.documentElement, i=720, d=i/100, o="orientationchange" ...

  10. 补充的flask实例化参数以及信号

    一.实例化补充 instance_path和instance_relative_config是配合来用的.这两个参数是用来找配置文件的,当用app.config.from_pyfile('settin ...