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#实现是排序算法总结系列的首篇文章,包含了一些概念的介绍以及交换排序(冒泡与 ...
随机推荐
- iostat监控磁盘io
1.安装#yum install sysstat 2.启动#/etc/init.d/sysstat start 3.自启动#checkfig sysstat 4.基本使用#iostat -k 2每两秒 ...
- openfalcon客户端自定义push 传输到transfer
. linux客户端部署agent . 编写脚本,比如: #!/usr/bin/env python #!-*- coding:utf8 -*- import requests import time ...
- 弹出框以及提示插件lghdialog.js的使用
以下使用方法 swfupload的使用
- leetcode 374
这个题目很简单,但是要注意细节和对题目的理解,一开始我把guess函数的作用理解错了,第一版代码长这样: int guessNumber(int n) { ; int high = n; while( ...
- cat常用参数详解
cat常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近,我的一个朋友对linux特别感兴趣,于是我觉得每天交给他一个命令的使用,这样一个月下来也会使用30个命令,基 ...
- C++复现经典游戏——扫雷
国庆小长假,当大家都去看人山人海的时候,我独自一人狂码代码.这两天想要实现的内容是Windows上的一个经典游戏——扫雷.相信90后和一些上班族对此并不陌生.然而,从win8开始,扫雷就不再是Wind ...
- c/c++ 数据结构 链表插入数据代码(一)
链表插入数据,有两种方法,链表头定义为指针. 1.指针传递 #include <stdio.h> #include <stdlib.h> typedef struct LNod ...
- ligerui_ligerTree_007_ligerTree动态加载节点
ligerui:ligerTree:动态加载节点: 源码地址:http://download.csdn.net/detail/poiuy1991719/8571255 效果图: 代码:json.txt ...
- 【C解毒】滥用变量
见:[C解毒]滥用变量
- 【笔记】jquery阻止冒泡事件发生的语句
时间触发时会执行两个步骤:1.捕获 2.冒泡,而很多浏览器包括jquery都不支持捕获动作所以只能执行冒泡动作. 所谓冒泡就是当点击就是事件的执行顺序,本人的理解为:但某一元素触发时间时它的祖先元素( ...