/**

* 各种排序

* @author zhaojaingwei

* @since 2011/11/21 16:14

*

*/

$list = array(3,5,1,2,10,8,15,19,20);

//快排

function fast(&$list, $low, $high){

if($high - $low > 5){

while($low < $high){

$key = excute($list, $low, $high);

fast($list, $low, $key - 1);

//fast($list, $key + 1, $high);//普通递归实现

$low = $key + 1;//尾递归实现

}

}else{

insert($list);

}

}

//快排执行一次排序

function excute(&$list, $low, $high){

swap($list, $low, ($low + $high)/2);

$temp = $list[$low];

while($low < $high){

while($low < $high && $list[$high] > $temp){

$high --;

}

$list[$low] = $list[$high];

while($low < $high && $list[$low] < $temp){

$low ++;

}

$list[$high] = $list[$low];

}

$list[$low] = $temp;

return $low;

}

//堆排序

function heap(&$list){

buildHeap($list);

for($i = count($list) - 1; $i > 0; $i --){

swap($list, $i, 0);

heapfy($list, 0, $i - 1);

}

}

//创建堆

function buildHeap(&$list){

for($i = (count($list) - 2)/2; $i >= 0; $i --){

heapfy($list, $i, count($list) - 1);

}

}

//维护堆

function heapfy(&$list, $low, $high){

$temp = $list[$low];

for($i = ($low * 2 + 1); $i <= $high; $i = ($i * 2 + 1)){

if($i < $high && $list[$i] < $list[$i + 1]){

$i ++;

}

if($temp < $list[$i]){

swap($list, $i, $low);

$low = $i;

}else{

break;

}

}

$list[$low] = $temp;

}

//希尔排序

function shell(&$list){

$a = 0;

$code = count($list)/3 + 1;

while($code >= 1){

for($i = $code; $i < count($list); $i ++){

$a ++;

if($list[$i] < $list[$i - $code]){

$temp = $list[$i];

$list[$i] = $list[$i - $code];

$j = $i - 2*$code;

for(; $j >= 0 && $list[$j] > $temp; $j -= $code){

$list[$j + $code] = $list[$j];

$a ++;

}

$list[$j + $code] = $temp;

}

}

$code = $code/3;

}

echo $a;

}

//直接插入排序

function insert(&$list){

$a = 0;

for($i = 1; $i < count($list); $i ++){

$a ++;

if($list[$i] < $list[$i - 1]){

$temp = $list[$i];

$list[$i] = $list[$i - 1];

$j = $i - 2;

for(; $list[$j] > $temp; $j --){

$a ++;

$list[$j + 1] = $list[$j];

}

$list[$j + 1] = $temp;

}

}

echo $a;

}

//简单选择排序

function select(&$list){

$a = 0;

for($i = 0; $i < count($list); $i ++){

$min = $i;

$a ++;

for($j = $i + 1; $j < count($list); $j ++){

$a ++;

if($list[$j] < $list[$min]){

$min = $j;

}

}

if($min != $i)

swap($list, $i, $min);

}

echo $a;

}

//冒泡排序

function bubble(&$list){

$swap = TRUE;

$a = 0;

for($i = 0; $i < count($list) && $swap; $i ++){

$swap = FALSE;

$a ++;

for($j = count($list) - 2; $j >= $i; $j --){

$a ++;

if($list[$j] > $list[$j + 1]){

$swap = TRUE;

swap($list, $j, $j + 1);

}

}

}

echo $a;

}

//移动或交换函数

function swap(&$list, $i, $j){

$temp = $list[$i];

$list[$i] = $list[$j];

$list[$j] = $temp;

}

?>

php实现排序,PHP实现各种排序相关推荐

  1. java算法----排序----(6)希尔排序(最小增量排序)

    1 package log; 2 3 public class Test4 { 4 5 /** 6 * java算法---希尔排序(最小增量排序) 7 * 8 * @param args 9 */ 1 ...

  2. python八大选择排序_Python实现选择排序

    选择排序: 选择排序(Selection sort)是一种简单直观的 排序算法 .它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最 ...

  3. pandas对dataframe进行排序:单数据列排序、多数据列排序、NA值排序位置、排序算法

    pandas对dataframe进行排序:单数据列排序.多数据列排序.NA值排序位置.排序算法 目录 pandas对dataframe进行排序 #仿真数据 #基于单数据列进行dataframe排序

  4. R语言dplyr包arrage函数排序dataframe实战:单列排序、多列排序、自定义排序

    R语言dplyr包arrage函数排序dataframe实战:单列排序.多列排序.自定义排序 目录 R语言dplyr包arrage函数排序dataframe实战:单列排序.多列排序

  5. R语言可视化包ggplot2绘制排序条形图实战:按照分类因子排序、按照数值排序

    R语言可视化包ggplot2绘制排序条形图实战:按照分类因子排序.按照数值排序 目录

  6. 将字符串下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p92 5.1.2 上级实训内容 [实训内容7]设有一个字符串为baawrskjghzlicda,将字符 ...

  7. 我的Java开发学习之旅------gt;Java经典排序算法之希尔排序

    一.希尔排序(Shell Sort) 希尔排序(Shell Sort)是一种插入排序算法,因D.L.Shell于1959年提出而得名. Shell排序又称作缩小增量排序. 二.希尔排序的基本思想 希尔 ...

  8. 我的Java开发学习之旅------Java经典排序算法之希尔排序

    一.希尔排序(Shell Sort) 希尔排序(Shell Sort)是一种插入排序算法,因D.L.Shell于1959年提出而得名. Shell排序又称作缩小增量排序. 二.希尔排序的基本思想 希尔 ...

  9. java 桶排序_[图解] 桶排序

    桶排序是一种排序的思想,其实现包括计数排序和基数排序两种,冒泡排序.选择排序.插入排序.归并排序.快速排序和堆排序都是基于比较的排序,而桶排序提出了一种新的思路,即基于数据状态的排序. 1. 桶排序的 ...

  10. 经典排序算法 - 鸽巢排序Pigeonhole sort

    经典排序算法 - 鸽巢排序Pigeonhole sort 原理类似桶排序,同样需要一个很大的鸽巢[桶排序里管这个叫桶,名字无所谓了] 鸽巢其实就是数组啦,数组的索引位置就表示值,该索引位置的值表示出现 ...

最新文章

  1. 思维dp ---- Codeforces Round #711 (Div. 2) - C. Planar Reflections[dp/记忆化搜索]
  2. oracle:sql约束
  3. C++命名空间namespace
  4. db_files 不要设置的太大,否则影响内存的使用
  5. 小米电视面板采购“砍单”
  6. vs2013代码模板设置
  7. 洛谷——P1720 月落乌啼算钱(斐波那契数列)
  8. ++库 照片风格转换风格_如何用神经网络实现照片的风格转换
  9. 智慧社区电商后台管理系统
  10. 企业级自动化运维工具Ansible详解(上)
  11. Remix IDE的本地环境搭建(ubuntu系统)以及编译智能合约
  12. kill 和 kill -9 的区别
  13. word文档无法编辑的解决办法
  14. linux mips汇编指令集,MIPS汇编与指令
  15. PS 逆时针绕圈文字
  16. 横幅广告(2)admob
  17. 【Python】Numpy数组的切片、索引详解:取数组的特定行列
  18. 干草的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. win10更新后我的电脑属性界面显示系统正在监控并保护你的电脑如何解决
  20. 像容忍自己一样容忍他人

热门文章

  1. Android内核开发:如何统计系统的启动时间
  2. RAID5阵列掉盘显示未初始化---解决过程
  3. php 实现二叉树的最大深度_LintCode 题解丨Apple面试题:二叉树的最大深度
  4. linux学习笔记:shell变量
  5. Linux shell脚本sed使用
  6. visual studio可以开发app吗_郑州app开发价格是怎么定得呢?预约理发app好做吗
  7. 不能使用 float 和 double 来表示金额等精确的值
  8. 关闭此标签页 关闭所有标签页easyUI
  9. php字符串操作整理,《PHP字符串操作》收集整理
  10. html代码怎么出歌词,html中的歌词翻译