$a = [1, 3, 5, 2, 4, 6, 12, 60, 45, 10, 32];
$len = count($a);
$num=0; /*
* 冒泡排序
* 原理:不停的对相邻两个数进行比较,直到最大的数冒出来,重复该过程
*
*/
for ($i = 0; $i < $len-1; $i++) {
for ($j=0;$j<$len-1;$j++){
if($a[$j] <$a[$j+1] ){
$temp=$a[$j];
$a[$j]=$a[$j+1];
$a[$j+1]=$temp; }
}
} /*
* 直接插入排序
* 原理:当前插入位置之前的元素有序
* 若插入当前位置的元素比有序元素最后一个元素大,则什么也不做
* 否则在有序序列中找到插入的位置,并插入
*
*/
for($i=0;$i<$len-1;$i++){
if ($a[$i]>$a[$i+1]){
for ($j=$i;$j>=0;$j--){
if($a[$j]>$a[$j+1]){
$temp=$a[$j+1];
$a[$j+1]=$a[$j];
$a[$j]=$temp;
$num++;
}else{
break;
}
}
}
} /*
* 简单选择排序
* 原理:从数组第一个元素开始依次确定从小到大的元素
*/
for ($i=0;$i<$len-1;$i++){
$k=$i;
for($j=$i+1;$j<$len;$j++){
if($a[$k] > $a[$j] ){
$k=$j;
}
}
if ($k!= $i){
$temp=$a[$k];
$a[$k]=$a[$i];
$a[$i]=$temp;
}
} /*
* 希尔排序
* 原理:将数组按指定步长分隔成若干子序列,然后分别对子序列进行排序(在这是直接)
*/
$k = floor($len / 2); while ($k>0) {
for ($i = 0; $i < $k; $i++) {
for ($j = $i; $j < $len && $j + $k < $len; $j = $j + $k) {
if ($a[$j] > $a[$j + $k]) {
$temp = $a[$j + $k];
$a[$j + $k] = $a[$j];
$a[$j] = $temp;
}
$num++;
}
$k=floor($k/2);
}
} //快速排序和归并排序的整体思想是先拆分在合并 /*
* 快速排序
* 原理:通过一趟排序将待排的记录分为两个独立的部分,其中一部分的记录的关键字均不大于
* 另一部分记录的关键字,然后再分别对这两部分记录继续进行快速排序,以达到整个序列有序,具体做法需要
* 每趟排序设置一个标准关键字和分别指向头一个记录的关键字和最后一个记录的关键字的指针。
*
*/ function quickSort2($array){
if (!isset($array[1]))
return $array;
$mid=$array[0];
$leftArray=[];
$rightArray=[];
foreach ($array as $k=>$v){
if($v>=$mid && $k!=0 ){
$rightArray[]=$v;
}
if($v<$mid){
$leftArray[]=$v;
}
}
$leftArray=quickSort2($leftArray);
$leftArray[]=$mid;
$rightArray=quickSort2($rightArray);
return array_merge($leftArray,$rightArray);
} /*
* 归并排序
* 原理:将数组拆分成两个独立的部分,然后在对独立的部分进行归并排序,它和快速排序的区别在于儿子的左边和儿子
* 的右边进行比较,然后合并成父left或父right
*/
function mergeSort($array){
$k=floor(count($array)/2);
if (!isset($array[1]))
return $array;
$leftArray=mergeSort(array_slice($array,0,$k));
$rightArray=mergeSort(array_slice($array,$k)); while (count($leftArray) && count($rightArray) ){
$m[]= ($leftArray[0] > $rightArray[0]) ? array_shift($rightArray) : array_shift($leftArray);
} return array_merge($m,$leftArray,$rightArray);
}

PHP常见排序算法的更多相关文章

  1. 常见排序算法(附java代码)

    常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...

  2. JS常见排序算法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. JavaScript版几种常见排序算法

    今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...

  4. 常见排序算法(JS版)

    常见排序算法(JS版)包括: 内置排序,冒泡排序,选择排序,插入排序,希尔排序,快速排序(递归 & 堆栈),归并排序,堆排序,以及分析每种排序算法的执行时间. index.html <! ...

  5. 常见排序算法-Python实现

    常见排序算法-Python实现 python 排序 算法 1.二分法     python    32行 right = length-  :  ]   ):  test_list = [,,,,,, ...

  6. python常见排序算法解析

    python——常见排序算法解析   算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...

  7. python——常见排序算法解析

    算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序, ...

  8. 常见排序算法总结 -- java实现

    常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间 ...

  9. 常见排序算法题(java版)

    常见排序算法题(java版) //插入排序:   package org.rut.util.algorithm.support;   import org.rut.util.algorithm.Sor ...

  10. [算法] 常见排序算法总结(C语言版)

    常见排序算法总结 本文对比较常用且比较高效的排序算法进行了总结和解析,并贴出了比较精简的实现代码,包括选择排序.插入排序.归并排序.希尔排序.快速排序等.算法性能比较如下图所示: 1 冒泡排序 基本原 ...

随机推荐

  1. mysql性能分析之explain的用法

    之前是一直没有听过explain这个关键字的, 最近因为项目中总是会有慢查询的一些操作, 所以请教了旁边的同事帮忙排查下原因, 看到同事用explain来分析一些sql语句, 感觉好像发现了新大陆一样 ...

  2. lvm创建卷组和格式化

    * 前提条件:/dev/sdb为一块空的硬盘 * 创建物理卷:pvcreate /dev/sdb * 创建卷组:vgcreate vol_name /dev/sdb (vol_name 为卷组名字) ...

  3. java-StringBuffer学习笔记

    字符串是敞亮,它们的值在创建之后不能更改字符串的内容一旦发生了变化,那么马上回创建一个新的对象 public class Demo1{ public static void main(String[] ...

  4. 纯代码实现wordpress文章隐藏内容评论可见

    在很多网站上都看过这个效果,比如说知己知彼网站,他的部分资源是需要我们评论后才能下载的,那么这个到底有什么用呢,对我而言,除了拿来装逼,还可以增加我的评论数量,不多说,先看看效果: 其实WordPre ...

  5. Spring源码学习:第2步--使用SLF4j+Log4j日志框架替换掉其自身的commons-logging日志框架

    正如Spring官方文档所述,其底层的实现选择了commons-logging作为日志框架.这一"失足"性的选择,竟连Spring自身都抱怨.但是,谁叫Spring如此优秀呢,即使 ...

  6. SoupUI安装

    (仅供学习,严禁用于商业应用) 今天开始在公司需要做websocket接口测试,以前从来没有接触过,对美好生活充满了向往啊,今天从安装开始吧! 至于什么是websocket自行百度,我也是百度出来的, ...

  7. web api 路由规则和接收数据

    1:默认是不带action的 所以再访问的时候 只需要 api/控制 2:加了action 就要 api/控制器/方法名字 接收方法  传参 json 序列化传参

  8. js监听事件

    //// 监听事件 监听使用各种浏览器 // var p1 = document.getElementById("p1"); //// 监听事件 // eventUtil.addE ...

  9. nodejs mysql 数据查询例子

    1.安装nodejs 2.安装mysql  npm包 地址:https://github.com/felixge/node-mysql npm install mysql 3.相应API查看及调用: ...

  10. form表单里的故事

    <form class="m-t" role="form" action='javascript:;'> <div class="f ...