PHP-----数组和常见排序算法
数组的创建
<?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-----数组和常见排序算法的更多相关文章
- Java基础语法(8)-数组中的常见排序算法
title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...
- 常见排序算法(附java代码)
常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...
- JavaScript版几种常见排序算法
今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...
- 常见排序算法(JS版)
常见排序算法(JS版)包括: 内置排序,冒泡排序,选择排序,插入排序,希尔排序,快速排序(递归 & 堆栈),归并排序,堆排序,以及分析每种排序算法的执行时间. index.html <! ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
- python——常见排序算法解析
算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序, ...
- 常见排序算法总结 -- java实现
常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间 ...
- 常见排序算法题(java版)
常见排序算法题(java版) //插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.Sor ...
- [算法] 常见排序算法总结(C语言版)
常见排序算法总结 本文对比较常用且比较高效的排序算法进行了总结和解析,并贴出了比较精简的实现代码,包括选择排序.插入排序.归并排序.希尔排序.快速排序等.算法性能比较如下图所示: 1 冒泡排序 基本原 ...
- 常见排序算法总结分析之选择排序与归并排序-C#实现
本篇文章对选择排序中的简单选择排序与堆排序,以及常用的归并排序做一个总结分析. 常见排序算法总结分析之交换排序与插入排序-C#实现是排序算法总结系列的首篇文章,包含了一些概念的介绍以及交换排序(冒泡与 ...
随机推荐
- php对二维数组进行相关操作(排序、转换、去空白等)
php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04 这篇文章主要介绍了php对二维数组进行相关操作,包括php对 ...
- 一个支持FMX.Win框架的托盘控件
不多说了 直接上代码........有任何问题请给我邮件.... // **************************************************************** ...
- java中获取日期和时间的方法总结
1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...
- 学习mysql
一 概述 1.什么是数据库 数据库就是数据的仓库. mysql是对数据库进行存储和指令操作的软件.这类软件成为数据管理系统Database Management System. 2.mysql的安装和 ...
- jqGrid预定义的格式化类型formatter
下表列出了jqGrid中的预定义格式化类型 所有预定义类型和编辑模式兼容,就是说数字,链接和email等需要转换,才能使他们被正确编辑 类型 选项(默认值参考语言选项) 描述 integer thou ...
- WINFORM 打开PDF
这里使用 Adobe Read 组件 的方式 首先电脑上需要安装AdobeRead VS中添加COM引用 再在工具选项卡中添加Adobe PDF Read 组件即可 从工具箱中直接拖动组件到窗体中即可
- 【C++】int、const char*、char*、char、string之间的转换
#include "stdafx.h" #include<string> #include<vector> #include<iostream> ...
- windows下MySQL更改数据库文件目录及1045,1067错误
MySQL安装时不能选择数据库文件的安装位置, 也没有可用的直接更改数据库目录的工具,要想更改数据目录,方法如下: MySQL安装并配置完毕,默认的数据哭安装目录为 C:/ProgramData/My ...
- *BigDecimal初识
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处 理16位有效数.在实际应用中,需要对更大或者更小的数进 ...
- sharding-jdbc-how2work 当当的sharding-jdbc剖析(查询)
1. 以JDBC作为出发点 1.1 重新实现了JDBC的几个接口 实现javax.sql.DataSource接口 ShardingDataSource实现java.sql.Connection接口 ...