数组的创建

 <?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. HDU 4287 Intelligent IME(字典树数组版)

    Intelligent IME Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. mysql5.5 修改字符集

    对于使用者来说,一般推荐使用utf8编码来存储数据.而要解决乱码问题,不单单是MySQL数据的存储问题,还和用户的程序文件的编码方式.用户程序和MySQL数据库的连接方式都有关系. 首先,MySQL有 ...

  3. Python开发【第六章】:Python面向对象

    编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...

  4. Lock较synchronized多出的特性

    1.尝试非阻塞形式获取锁 tryLock() :当前线程尝试获取锁,如果锁被占用返回false;如果成功则占有锁 //类似用法if(lock.tryLock()) { try { System.out ...

  5. .NET中string[]数组和List<string>泛型的相互转换以及Array类的Sort()方法(转)

    从string[]转List<string>: " }; List<string> list = new List<string>(str); 从List ...

  6. MVC中的模型

    为MVC Music Store 建模 建模代码: public class Album { public virtual int AlbumId { get; set; } public virtu ...

  7. HtmlAgilityPack抓取搜房网数据简单示例

    HtmlAgilityPack是一个开源的解析HTML元素的类库,最大的特点是可以通过XPath来解析HMTL,如果您以前用C#操作过XML,那么使用起HtmlAgilityPack也会得心应手.目前 ...

  8. 20145320 《Java程序设计》第8周学习总结

    20145320 <Java程序设计>第8周学习总结 教材学习内容总结 15.1日志 java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可以在标准ja ...

  9. AngularJS基础概要整理(下)

    五.AngularJS Scope(作用域) Scope(作用域)是应用在HTML(视图)和JavaScript(控制器)之间的纽带. Scope是一个对象,有可用的方法和属性. Scope可应用在视 ...

  10. java实现求数组中元素第二大的元素

    /** * 找出数组中数第二大的值 * @param array * @date 2016-9-25 * @author shaobn */ public static void getMethod_ ...