php 排序算法程序不用递归

 更新时间:2016年11月25日 15:56  点击:2184

function quickSort(&$data, $beg, $end) 

02 { 

03 if ($end > $beg) { 

04 $piv = $data[$beg]; 

05 $k = $beg + 1; 

06 $r = $end; 

07 while ($k < $r) { 

08 if ($data[$k] < $piv) { 

09 $k++; 

10 } else { 

11 $tmp = $data[$k]; 

12 $data[$k] = $data[$r]; 

13 $data[$r] = $tmp; 

14 $r--; 

15 } 

16 } 

17 if ($data[$k] >= $piv) { 

18 $k--; 

19 } 

20 $tmp = $data[$k]; 

21 $data[$k] = $data[$beg]; 

22 $data[$beg] = $tmp; 

23 quickSort($data, $beg, $k); 

24 quickSort($data, $r, $end); 

25 } 

26 } 

27   

28 function quickSort2(&$data) 

29 { 

30 $stack = array(); 

31 array_push($stack, array(0, count($data) - 1)); 

32 while (list($beg, $end) = array_pop($stack)) { 

33 if ($end > $beg) { 

34 $piv = $data[$beg]; 

35 $k = $beg + 1; 

36 $r = $end; 

37 while ($k < $r) { 

38 if ($data[$k] < $piv) { 

39 $k++; 

40 } else { 

41 $tmp = $data[$k]; 

42 $data[$k] = $data[$r]; 

43 $data[$r] = $tmp; 

44 $r--; 

45 } 

46 } 

47 if ($data[$k] >= $piv) { 

48 $k--; 

49 } 

50 $tmp = $data[$k]; 

51 $data[$k] = $data[$beg]; 

52 $data[$beg] = $tmp; 

53 array_push($stack, array($beg, $k)); 

54 array_push($stack, array($r, $end)); 

55 } 

56 } 

57 } 

58   

59 $data = array(7,6,6,3,8,1,8,1,9,1,3,11,51,1,25); 

60 //selectSort($data); 

61 //insertSort($data); 

62 quickSort2($data);

 function getServerName()
 {
  $ServerName = strtolower($_SERVER['SERVER_NAME']?$_SERVER['SERVER_NAME']:$_SERVER['HTTP_HOST']);
  if( strpos($ServerName,'http://') )
  {   
   return str_replace('http://','',$ServerName);
  }  
  return $ServerName;
 }
 
 //实例调用方法
 
 echo $getServerName;
 
 /*
 函数说明:
  strtolower 把字母转换成不写
  str_replace 替换指定的内容
  strpos 判断字符是否正在指定字符串中
  $_SERVER php全局变量
  本站原创教程,转载注明来源www.111cn.net
 */

对数组的添加(首尾数据添加(不限定条数)以及中间任意位置添加数据操作) . 
2~对数组的删除(首尾的数据删除(不限定条数)以及中间任意位置的数据删除操作,条件:对数组中间位置删除的,后面的值往前挪,接上以前的位置)  .  
3~对数据的排序操作(排序操作,要的是效率)   . 
4~对数组的查询(对数组中的某一数据进行查询,如果满足,则生成新的数组,这个新的数组就是满足查询条件的,条件:查询,并不是查询某一个值,还有查询某一个值满足某个条件,举个例子:查询数组中某个值大于5的,全部筛选出来)


1、php中的数组实质上是map结构,对于索引数组,添加或删除元素,它并不重新索引。
2、避免混合索引数组和关联数组
其余的要求,查找php手册应该有答案。
说实话,我一直记不住那么多函数。
3。默认的冒泡排序,堆排序,快速排序,插入排序,二分。看你的需求情况了
4.还是循环。
PHP数组虽然强大,但效率也很低


2 数组的删除,以字符串为索引的,直接删除就OK。unset
   以数字为索引的,unset删除,然后使用array_values重置数组。
3 usort排序,可以利用callback函数自己来实现算法。效率主要看你写的算法如何。


1~对数组的添加(首尾数据添加(不限定条数)以及中间任意位置添加数据操作) .
arrar_unshift(数组头部添加数据)
array_push(数组尾部添加数组)
arrar_fill(中间任意位置添加)
2~对数组的删除(首尾的数据删除(不限定条数)以及中间任意位置的数据删除操作,条件:对数组中间位置删除的,后面的值往前挪,接上以前的位置)  .
array_shift(数组头部删除数据)
array_pop(数组为不删除数据)


array_slice不会对原始数组造成任何修改,我是想说array_splice。
刚才又查了下手册,发现array_splice功能好强大,对数组的任何位置的任何个数的增删改操作,都可以用array_splice搞定。
关于非哈希数组重建数字索引的问题,array_merge和array_values都可以,刚才经过试验,后者更快

//ini_set("display_errors",1);//是否显示报错信息
//ini_set('include_path', ini_get('include_path').';D:\www.111cn.net\htdocs\lianxi\1.7.2\Classes');//设置此页面包含路径

require_once("./1.7.2/Classes/PHPExcel.php");
require_once("./1.7.2/Classes/PHPExcel/Writer/Excel5.php");

$objExcel = new PHPExcel();
//print_r($objExcel);
$objWriter = new PHPExcel_Writer_Excel5($objExcel);
//$objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用于 2007 格式   
//$objWriter->setOffice2003Compatibility(true);  

//设置文档基本属性    www.111cn.net
$objProps教程 = $objExcel->getProperties();
//print_r($objProps);
$objProps->setCreator("Zeal Li" );   
$objProps->setLastModifiedBy("Zeal Li" );   
$objProps->setTitle("Office XLS Test Document" );   
$objProps->setSubject("Office XLS Test Document, Demo" );   
$objProps->setDescription("Test document, generated by PHPExcel." );   
$objProps->setKeywords("office excel PHPExcel" );   
$objProps->setCategory("Test" );

//*************************************   
//设置当前的sheet索引,用于后续的内容操作。   
//一般只有在使用多个sheet的时候才需要显示调用。   
//缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0   
 
$objExcel->setActiveSheetIndex(0);   
  
  
$objActSheet = $objExcel->getActiveSheet();   
$objActSheet = $objExcel->getActiveSheet();  
//设置当前活动sheet的名称   
$objActSheet->setTitle('测试Sheet' );   
  
//*************************************   
//设置单元格内容   
//   
//由PHPExcel根据传入内容自动判断单元格内容类型   
$objActSheet ->setCellValue('A1' , '字符串内容' );  // 字符串内容   
$objActSheet ->setCellValue('A2' , '<a herf="www.111cn.net">26</a>');            // 数值   
$objActSheet ->setCellValue('A3' , true);          // 布尔值   
$objActSheet ->setCellValue('A4' , '=SUM(A2:A2)' ); // 公式   
  
//显式指定内容类型   
$objActSheet ->setCellValueExplicit('A5' , '847475847857487584' ,  PHPExcel_Cell_DataType::TYPE_STRING); 
//合并单元格   
$objActSheet ->mergeCells('B1:C22' );   
  
//分离单元格   
$objActSheet ->unmergeCells('B1:C22' );   

//*************************************   
//设置单元格样式   
//   
  
//设置宽度   
$objActSheet ->getColumnDimension('B' )->setAutoSize(true);   
$objActSheet ->getColumnDimension('A' )->setWidth(30);   
  
$objStyleA5 = $objActSheet ->getStyle('A5' );   

//设置单元格内容的数字格式。   
//   
//如果使用了 PHPExcel_Writer_Excel5 来生成内容的话,   
//这里需要注意,在 PHPExcel_Style_NumberFormat 类的 const 变量定义的   
//各种自定义格式化方式中,其它类型都可以正常使用,但当setFormatCode   
//为 FORMAT_NUMBER 的时候,实际出来的效果被没有把格式设置为"0"。需要   
//修改 PHPExcel_Writer_Excel5_Format 类源代码中的 getXf($style) 方法,   
//在 if ($this->_BIFF_version == 0x0500) { (第363行附近)前面增加一   
//行代码:   
//if($ifmt === '0') $ifmt = 1;   
//   
//设置格式为PHPExcel_Style_NumberFormat::FORMAT_NUMBER,避免某些大数字   
//被使用科学记数方式显示,配合下面的 setAutoSize 方法可以让每一行的内容   
//都按原始内容全部显示出来。   
$objStyleA5->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);

//设置字体   
$objFontA5 = $objStyleA5 ->getFont();   
$objFontA5 ->setName('Courier New' );   
$objFontA5 ->setSize(10);   
$objFontA5 ->setBold(true);   
$objFontA5 ->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);   
$objFontA5 ->getColor()->setARGB('FF999999' );   
  
//设置对齐方式   
$objAlignA5 = $objStyleA5 ->getAlignment();   
$objAlignA5 ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);   
$objAlignA5 ->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);   
  
//设置边框   
$objBorderA5 = $objStyleA5 ->getBorders();   
$objBorderA5 ->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);   
$objBorderA5 ->getTop()->getColor()->setARGB('FFFF0000' ); // color   
$objBorderA5 ->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);   
$objBorderA5 ->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);   
$objBorderA5 ->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);   
  
//设置填充颜色   
$objFillA5 = $objStyleA5 ->getFill();   
$objFillA5 ->setFillType(PHPExcel_Style_Fill::FILL_SOLID);   
$objFillA5 ->getStartColor()->setARGB('FFEEEEEE' );

//从指定的单元格复制样式信息.   
$objActSheet ->duplicateStyle($objStyleA5 , 'B1:C22' );   

//*************************************   
//添加图片   
$objDrawing = new PHPExcel_Worksheet_Drawing();   
$objDrawing ->setName('ZealImg' );   
$objDrawing ->setDescription('Image inserted by Zeal' );   
$objDrawing ->setPath('../images/201003/1269919647975424741.jpg' );   
$objDrawing ->setHeight(150);   
$objDrawing ->setCoordinates('C23' );   
$objDrawing ->setOffsetX(10);   
$objDrawing ->setRotation(15);   
$objDrawing ->getShadow()->setVisible(true);   
$objDrawing ->getShadow()->setDirection(36);   
$objDrawing ->setWorksheet($objActSheet );
  
//添加一个新的worksheet   
$objExcel ->createSheet();   
$objExcel ->getSheet(1)->setTitle('测试2' );   
  
//保护单元格   
$objExcel ->getSheet(1)->getProtection()->setSheet(true);   
$objExcel ->getSheet(1)->protectCells('A1:C22' , 'PHPExcel' );   
//*************************************   
//输出内容   
//   
$outputFileName = "output.xls" ;   
//到文件   
$objWriter->save($outputFileName);   
//or   
//到浏览器 
/*
header("Content-Type: application/force-download");   
header("Content-Type: application/octet-stream");   
header("Content-Type: application/download");   
header('Content-Disposition:inline;filename="'.$outputFileName.'"');
header("Content-Disposition: attachment;filename=商品销售点击数据报表.xls ");   
header("Content-Transfer-Encoding: binary");   
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");   
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");   
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");   
header("Pragma: no-cache"); 
$objWriter->save('php://output');

$_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言
$_SERVER['REMOTE_ADDR'] //当前用户 IP 。
$_SERVER['REMOTE_HOST'] //当前用户主机名
$_SERVER['REQUEST_URI'] //URL

$_SERVER['REMOTE_PORT'] //端口。
$_SERVER['SERVER_NAME'] //服务器主机的名称。
$_SERVER['PHP_SELF']//正在执行脚本的文件名
$_SERVER['argv'] //传递给该脚本的参数。
$_SERVER['argc'] //传递给程序的命令行参数的个数。
$_SERVER['GATEWAY_INTERFACE']//CGI 规范的版本。
$_SERVER['SERVER_SOFTWARE'] //服务器标识的字串
$_SERVER['SERVER_PROTOCOL'] //请求页面时通信协议的名称和版本
$_SERVER['REQUEST_METHOD']//访问页面时的请求方法
$_SERVER['QUERY_STRING'] //查询(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录
$_SERVER['HTTP_ACCEPT'] //当前请求的 Accept: 头部的内容。
$_SERVER['HTTP_ACCEPT_CHARSET'] //当前请求的 Accept-Charset: 头部的内容。
$_SERVER['HTTP_ACCEPT_ENCODING'] //当前请求的 Accept-Encoding: 头部的内容
$_SERVER['HTTP_CONNECTION'] //当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER['HTTP_HOST'] //当前请求的 Host: 头部的内容。
$_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] //当前请求的 User_Agent: 头部的内容。
$_SERVER['HTTPS']//如果通过https教程访问,则被设为一个非空的值(on),否则返回off
$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。
$_SERVER['SERVER_ADMIN'] #管理员信息
$_SERVER['SERVER_PORT'] #服务器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串。
$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER['PHP_AUTH_USER'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER['PHP_AUTH_PW'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER['AUTH_TYPE'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型

[!--infotagslink--]

相关文章

  • C#几种排序算法

    作者:Sabine 【导读】本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序  冒泡排序 using System; namespace BubbleSorter { public class Bubb...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • antdesign-vue结合sortablejs实现两个table相互拖拽排序功能

    这篇文章主要介绍了antdesign-vue结合sortablejs实现两个table相互拖拽排序功能,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-09
  • C# 参数按照ASCII码从小到大排序(字典序)

    这篇文章主要介绍了C# 参数按照ASCII码从小到大排序(字典序)的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • js实现列表按字母排序

    这篇文章主要为大家详细介绍了js实现列表按字母排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-11
  • C#实现排序的代码详解

    在本篇文章里小编给大家整理的是关于C#实现排序的代码以及相关知识点,需要的朋友们参考下。...2020-06-25
  • 图文详解Heap Sort堆排序算法及JavaScript的代码实现

    这篇文章以图文详解Heap Sort堆排序算法及JavaScript的代码实现,堆排序算法基于类二叉树的堆数据结构,需要的朋友可以参考下...2016-05-05
  • C#中实现任意List的全组合算法代码

    这篇文章主要是介绍了.net C# 实现任意List的全组合算法实现代码,需要的朋友可以参考下...2020-06-25
  • 同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)

    这篇文章主要给大家介绍了关于同时兼容JS和C#的RSA加密解密算法,通过该算法可以对web提交的数据进行加密传输,文中通过图文及示例代码介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。...2020-06-25
  • js实现数组冒泡排序、快速排序原理

    这篇文章主要为大家详细介绍了js实现数组冒泡排序、快速排序的原理,感兴趣的小伙伴们可以参考一下...2016-03-10
  • c# n个数排序实现代码

    c# n个数排序实现代...2020-06-25
  • C#常用数据结构和算法总结

    这篇文章主要介绍了C#常用数据结构和算法,这里我们总结了一些知识点,可以帮助大家理解这些概念。...2020-06-25
  • 分享javascript实现的冒泡排序代码并优化

    本文给大家汇总介绍了几个个人收藏的JavaScript实现冒泡排序的代码,都是非常的不错,有需要的小伙伴可以参考下...2016-06-12
  • C#使用linq对数组进行筛选排序的方法

    这篇文章主要介绍了C#使用linq对数组进行筛选排序的方法,实例分析了C#实用linq扩展进行数组排序的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • JS实现的随机排序功能算法示例

    这篇文章主要介绍了JS实现的随机排序功能算法,结合具体实例形式分析了javascript常用的排序算法实现技巧,需要的朋友可以参考下...2017-06-15
  • C#实现冒泡排序算法的代码示例

    冒泡排序即是对数组每次轮循出最大数或最小数放在队尾,这里我们来看一下C#实现冒泡排序算法的代码示例,需要的朋友可以参考下...2020-06-25
  • C++实现的O(n)复杂度内查找第K大数算法示例

    这篇文章主要介绍了C++实现的O(n)复杂度内查找第K大数算法,结合实例形式分析了算法的原理以及具体实现方法,需要的朋友可以参考下...2020-04-25
  • c# 实现位图算法(BitMap)

    这篇文章主要介绍了c# 如何实现位图算法(BitMap),文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-11-03
  • 一篇文章带你搞懂Vue虚拟Dom与diff算法

    这篇文章主要给大家介绍了关于Vue虚拟Dom与diff算法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-26
  • R语言关于随机森林算法的知识点详解

    在本篇文章里小编给大家整理的是一篇关于R语言关于随机森林算法的知识点详解内容,有兴趣的朋友们可以跟着学习下。...2021-05-13