数组的创建

 <?php
//php创建数组
//第一种方法
$arr[0]=1;
$arr[1]=23;
$arr[2]=20;
$arr[3]=43; for($i=0;$i<count($arr);$i++){
echo '<br>'.$arr[$i];
}
//第二种方法
$b=array(1,23,20,43); for($i=0;$i<count($b);$i++){
echo '<br>'.$b[$i];
} //第三种方法---自己指定下标----但是遍历数组的时候使用foreach循环
$c['paxster']='pax';
$c['boychik']='boy';
foreach($c as $val){
echo $val.'<br>';
}
foreach ($c as $key => $value) {
echo $key.'='.$value.'<br>';
} //js里的创建数组
//var arr=new Array();
//var a = new Array(5); 指定长度
//var abb=[];
?>

数组的遍历和一些细节。

还可以通过数组运算符对多个数组进行操作,详细参看php手册。

 <?php
//1.
$arr=array(2=>'hello',22,33);
//echo $arr[1];---->>报错
//echo $arr[3];---->>22
//echo $arr[5];---->>报错 //2.重新赋值--------用后定义的值覆盖即可
$abb=array(1=>4,32,23);
$abb[1]=40;
echo $abb[1]; //3.布尔值作为下标
$acc[true]='wuhan';
$acc[false]='hubei';
$acc[null]='china';
$acc[12.3]='earth'; echo $acc[1].'<br>';
echo $acc[0].'<br>';
echo $acc[null].'<br>';
echo $acc[''].'<br>'; echo $acc[12];
echo $acc[12.3]; //打印数组的详细信息
print_r($acc);
var_dump($acc); //4.动态改变数组
$add=array(2,3);
$add[4]=34;
echo $add[4];//会把两者之间空余的元素忽略,后面添加的元素追加到前面的地址上 //5.数组引用的陷阱---会把addme解析为常量,提示notice,所以把addme定义为一个字符串就不会出错
const addme='QQ';
$e[addme]='me';
echo $e[addme]; //6.is_array----是则返回1,不是则返回空
$f=array(00,12);
echo is_array($f); //拆分字符串explode
$g='1 2 3 4 5';
$h='1-2-3-4-5';
$gg=explode(" ",$g);
$hh=explode("-",$h);
print_r($gg);
print_r($hh); //使用4种方式遍历数组
//for
$dd=array(20,30,40,50,60); for($i=0;$i<count($dd);$i++){
echo '<br/>'.$dd[$i];
}
//while
$i=0;
while($i<count($dd)){
echo '<br/>'.$dd[$i];
++$i;
//$i++;
}
//do..while
$i=0;
do{
echo '<br/>'.$dd[$i];
++$i;
}while($i<count($dd));
//foreach
foreach($dd as $key => $value){
//echo $key=$value.'<br/>';
echo "$key=$value<br/>";
}
?>

排序算法-----1.冒泡算法(去年学c的时候老师详细讲解了冒泡法,也是最简单的排序算法,计算效率相对较低)

 //bubble sort
$arr=array(20,-20,0,5,-49);
/*$temp=0;
for($i=0;$i<count($arr)-1;$i++){
for($j=0;$j<count($arr)-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
print_r($arr);*/
//封装sort函数------形参加上地址符
function bubbleSort(&$arr){
$temp=0;
for($i=0;$i<count($arr)-1;$i++){
for($j=0;$j<count($arr)-1-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$temp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$temp;
}
}
}
}
bubbleSort($arr);

排序算法-----2.选择排序

 //selectSort选择排序法
function selectSort(&$arr){ for($i=0;$i<count($arr)-1;$i++){//减去自身
$temp=0;//中间变量
$min=$arr[$i];//假设最小值
$minIndex=$i;//对应的下标值
for($j=$i+1;$j<count($arr);$j++){//排好的不用再排
if($min>$arr[$j]){
$min=$arr[$j];
$minIndex=$j;
}
}
//交换值
$temp=$arr[$i];
$arr[$i]=$arr[$minIndex];
$arr[$minIndex]=$temp;
}
}
selectSort($arr);

排序算法-----3.插入排序

 //insertSort插入排序
function insertSort(&$arr){
for($i=1;$i<count($arr);$i++){
$insertValue=$arr[$i];
$insertIndex=$i-1;
while($insertIndex>=0&&$insertValue<$arr[$insertIndex]){
$arr[$insertIndex+1]=$arr[$insertIndex];
$insertIndex--;
}
$arr[$insertIndex+1]=$insertValue;
}
}
insertSort($arr);
print_r($arr);
var_dump($arr);

排序算法-----4.快速排序---各种语言的排序算法思想大同小异。php的快速排序算法算简单的,java更难一点。详情请点击

 function quickSort($arr) {
if (count($arr) > 1) {
$k = $arr[0];
$x = array();
$y = array();
$_size = count($arr);
for ($i=1; $i<$_size; $i++) {
if ($arr[$i] <= $k) {
$x[] = $arr[$i];
} else {
$y[] = $arr[$i];
}
}
$x = quickSort($x);
$y = quickSort($y);
return array_merge($x, array($k), $y);
} else {
return $arr;
}
}

JS实现快速排序-----很好的一篇解释文章

 var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0];//代表中位数
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};

splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。-----splice()详细

slice()选取数组元素。返回一个新的数组,包含从 start 到 end (不包括end元素)的 arrayObject 中的元素。

concat() 方法用于连接两个或多个数组。-----concat()详细

PHP-----数组和常见排序算法的更多相关文章

  1. Java基础语法(8)-数组中的常见排序算法

    title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...

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

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

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

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

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

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

  5. python常见排序算法解析

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

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

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

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

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

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

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

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

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

  10. 常见排序算法总结分析之选择排序与归并排序-C#实现

    本篇文章对选择排序中的简单选择排序与堆排序,以及常用的归并排序做一个总结分析. 常见排序算法总结分析之交换排序与插入排序-C#实现是排序算法总结系列的首篇文章,包含了一些概念的介绍以及交换排序(冒泡与 ...

随机推荐

  1. php对二维数组进行相关操作(排序、转换、去空白等)

    php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04   这篇文章主要介绍了php对二维数组进行相关操作,包括php对 ...

  2. 一个支持FMX.Win框架的托盘控件

    不多说了 直接上代码........有任何问题请给我邮件.... // **************************************************************** ...

  3. java中获取日期和时间的方法总结

    1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下:  要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...

  4. 学习mysql

    一 概述 1.什么是数据库 数据库就是数据的仓库. mysql是对数据库进行存储和指令操作的软件.这类软件成为数据管理系统Database Management System. 2.mysql的安装和 ...

  5. jqGrid预定义的格式化类型formatter

    下表列出了jqGrid中的预定义格式化类型 所有预定义类型和编辑模式兼容,就是说数字,链接和email等需要转换,才能使他们被正确编辑 类型 选项(默认值参考语言选项) 描述 integer thou ...

  6. WINFORM 打开PDF

    这里使用 Adobe Read 组件 的方式 首先电脑上需要安装AdobeRead VS中添加COM引用 再在工具选项卡中添加Adobe PDF Read 组件即可 从工具箱中直接拖动组件到窗体中即可

  7. 【C++】int、const char*、char*、char、string之间的转换

    #include "stdafx.h" #include<string> #include<vector> #include<iostream> ...

  8. windows下MySQL更改数据库文件目录及1045,1067错误

    MySQL安装时不能选择数据库文件的安装位置, 也没有可用的直接更改数据库目录的工具,要想更改数据目录,方法如下: MySQL安装并配置完毕,默认的数据哭安装目录为 C:/ProgramData/My ...

  9. *BigDecimal初识

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处 理16位有效数.在实际应用中,需要对更大或者更小的数进 ...

  10. sharding-jdbc-how2work 当当的sharding-jdbc剖析(查询)

    1. 以JDBC作为出发点 1.1 重新实现了JDBC的几个接口 实现javax.sql.DataSource接口  ShardingDataSource实现java.sql.Connection接口 ...