关于PHP中的基础算法,小结一下,也算是本博客的第一篇文章

1.2种排序算法
冒泡排序:
例子:个人见解
	5 6 2 3 7 9

	第一趟
5 6 2 3 7 9
5 2 6 3 7 9
5 2 3 6 7 9
5 2 3 6 7 9
5 2 3 6 7 9 第二趟
2 5 3 6 7 9
2 3 5 6 7 9
2 3 5 6 7 9
2 3 5 6 7 9 第三趟
2 3 5 6 7 9
2 3 5 6 7 9
2 3 5 6 7 9 第四趟
2 3 5 6 7 9
2 3 5 6 7 9 第五趟
     2 3 5 6 7 9

两两比较,每一趟中都会确定出最大的数然后放在右边,冒泡速度较慢,但是比较稳定。

 代码方面主要是嵌套的for循环

 代码:

 #冒泡排序
#原理两两比较,大的放右边,每次循环会排出一个最大的放在右边
function maopao($arr){
$len=count($arr);
for ($i=0; $i < $len-1; $i++) {
for ($a=0; $a <$len-1-$i ; $a++) {
if ($arr[$a]>$arr[$a+1]) {
$t=$arr[$a];
$arr[$a]=$arr[$a+1];
$arr[$a+1]=$t;
}
}
}
return $arr; }
$arr=[5,6,8,1,2,3,7,55,69,23,11];
var_dump(maopao($arr));
选择排序:
例子:个人见解
	#选择排序
8 5 6 2 4 7 第一趟
5 8 6 2 4 7
5 8 6 2 4 7
2 8 6 5 4 7
2 8 6 5 4 7
2 8 6 5 4 7 第二趟 2 6 8 5 4 7
2 5 8 6 4 7
2 4 8 6 5 7
2 4 8 6 5 7 第三趟 2 4 6 8 5 7
2 4 5 8 6 7
2 4 5 8 6 7 第四趟
2 4 5 6 8 7
2 4 5 6 8 7 第五趟
2 4 5 6 7 8
假设数组中靠左的元素是小的,然后跟右边的元素比较,如果左边的大于右边的就换到左边,每趟都能确定出一个最小值,缺点在于不稳定性,速度快于冒泡排序。
代码:
 #选择排序
#那最左边的和右边比较如果大于就换到右边,每趟确定出一个最小值
function xuanze($arr){
$len=count($arr);
for ($i=0; $i <$len-1 ; $i++) {
//假设当前最左边的元素是最小值,保存下标
$key=$i;
for ($j=$i+1; $j < $len; $j++) {
//如果左边的大于右边的就保存下标
if($arr[$key]>$arr[$j]){
$key=$j;
}
}
//找到最小的值,交换下标
$temp=$arr[$key];
$arr[$key]=$arr[$i];
$arr[$i]=$temp;
}
return $arr;
}
$arr=[11,2,3,55,66,99];
var_dump(xuanze($arr));

快速排序:

原理:先取数组中的任意一个数作为基准数,一般是数组下标的第一个,然后遍历一遍数组,声明两个空数组,升序的话,将小的元素放在左边,将大的元素放在右边,然后利用递归进行继续分多个数组然后排序。

function quick_sort($arr){
$len=count($arr);
if($len<=1)return $arr;
$left=$right=[];
for($i=1;$i<$len;$++;){
if($arr[0]>$arr[$i]){
$left[]=$arr[$i];
}else{
$right[]=$arr[$i];
}
}
$left=quick_sort($left);
$right=quick_sort($right);
return arrr_merge($left,array($arr[0]),$right);
}

关于排序先写三个,日后跟新~~

1.2种查找算法
顺序查找:
这个比较简单,原理就是从第一个开始比较直到找到,效率比较低,较稳定。
代码:
#选择排序
#存在值返回该值的下标,不存在返回false
function shunxu($arr,$target){
$len=count($arr);
for ($i=0; $i <$len ; $i++) {
if ($arr[$i]==$target) {
return $i;
}
}
return false;
}
$arr=[2,5,6,3,8,52,6];
var_dump(shunxu($arr,52));
二分法查找
条件严格,数组必须有序排列,效率较高。
原理:取一个中间值进行和要查找的值比较,假如数组升序排序,值大于要查找的值,然后下标减一

#二分法查找
#选择升序数组
function erfen($arr,$target){
$len=count($arr)-1;
$middle=ceil($len/2);
if ($arr[$middle]==$target) {
return true;
}elseif($arr[$middle]>$target){
for ($i=0; $i <$middle ; $i++) {
if ($arr[$i]==$target) {
return true;
}
}
}else{
//因为循环的是长度所以得+1
for ($i=$middle; $i < $len+1 ; $i++) {
if ($arr[$i]==$target) {
return true;
}
}
}
return false;
}
$arr=[1,2,3,4,5,6,7,10,11];
var_dump(erfen($arr,11));

先写这几个吧,日后在更!

 
 

PHP数组基本排序算法和查找算法的更多相关文章

  1. cb34a_c++_STL_算法_查找算法_(7)_lower_bound

    cb34a_c++_STL_算法_查找算法_(7)_lower_bound//针对已序区间的查找算法,如set,multiset关联容器-自动排序lower_bound()--第一个可能的位置uppe ...

  2. cb33a_c++_STL_算法_查找算法_(6)binary_search_includes

    cb33a_c++_STL_算法_查找算法_(6)binary_search_includes//针对已序区间的查找算法,如set,multiset关联容器-自动排序binary_search(b,e ...

  3. cb32a_c++_STL_算法_查找算法_(5)adjacent_find

    cb32a_c++_STL_算法_查找算法_(5)adjacent_findadjacent_find(b,e),b,begin(),e,end()adjacent_find(b,e,p),p-par ...

  4. cb28a_c++_STL_算法_查找算法_(1)find_find_if

    cb28a_c++_STL_算法_查找算法_(1)find_find_iffind() //线性查找,比较慢.pos1 = find(ilist.begin(), ilist.end(), 5);fi ...

  5. cb31a_c++_STL_算法_查找算法_(4)find_first_of

    cb31a_c++_STL_算法_查找算法_(4)find_first_offind_first_of(b,e,sb,se),sb,second begin, se,second end();find ...

  6. cb30a_c++_STL_算法_查找算法_(3)search_find_end

    cb30a_c++_STL_算法_查找算法_(3)search_find_endsearch()pos = search(ideq.begin(), ideq.end(), ilist.begin() ...

  7. cb29a_c++_STL_算法_查找算法_(2)search_n

    cb29a_c++_STL_算法_查找算法_(2)search_n//比如:连续查找连续的n个8search_n(b,e,c,v),迭代器b,begin(),e,end().连续的c个vpos=sea ...

  8. PHP的排序算法跟查找算法

    排序算法: (1)冒泡排序 $arr = array(15,8,20,50,37,85,10,5,11,4); //冒泡排序 function maoPao($arr){ for($i = 0; $i ...

  9. STL_算法_01_查找算法

    1. 来自教程:第6讲 PPT.15 ◆ 常用的查找算法: 1.1.按条件查找N个相邻的元素 ( adjacent 是 邻近的意思) iterator = adjacent_find(iterator ...

随机推荐

  1. thinkPHP内置字符串截取msubstr函数用法详解

    作者:陈达辉 字体:[增加 减小] 类型:转载 时间:2016-11-15 我要评论 这篇文章主要介绍了thinkPHP内置字符串截取函数用法,结合实例形式分析了thinkPHP内置的字符串截取函数功 ...

  2. windows下github 出现Permission denied (publickey).解决方法

    今天在学习github的时候遇到了一些问题,然后爬了一会,找到了解决方法记录下来,以防忘记,当然能帮助别人最好啦! github教科书传送门:http://www.liaoxuefeng.com/wi ...

  3. 什么是Linux主机?

    Linux主机是基于Linux内核的服务器操作系统配置的主机(常见Linux服务器操作系统如:Redhat,CentOS,Debian,FreeBSD,Ubentu等). Linux主机采用国内功能最 ...

  4. Typescript学习笔记

    什么是 TypeScript TypeScript 是 JavaScript 的类型的超集,它可以编译成纯 JavaScript. 安装 TypeScript 命令行工具安装: npm install ...

  5. CSS用HTML中的style属性替换

    废话不多说上代码: 1.用CSS给文字添加背景色: <html> <head> <style type="text/css"> body {ba ...

  6. 【编程技巧】Ext.QuickTips.init();

    启动悬浮提示(在你验证非法时.和现实提示语句等) 默认情况下悬浮提示没有启动:所以必须加上这句代码

  7. shopnc验证码显示不了

    data/config文件编码问题,要utf-8无bom

  8. (1-2)SpringCloud:服务的消费者rest+ribbon

    服务发现的任务是由Eureka客户端完成,而服务的消费任务由Ribbon完成.Ribbon是一个基于HTTP和TCP的客户端负载据衡器,它可以通过客户端中配置ribbonServerList服务端列表 ...

  9. django url路由参数错误

    出现错误: TypeError get() got an unexpected keyword argument 'teacher_id 出错原因: view类中,get方法获得了一个多余的额参数,这 ...

  10. @@IDENTITY详细测试

    今天看数据库SQL,有发现存储过程中有使用到SCOPE_IDENTITY()这个函数,后来问了下谷歌大婶,搜到一个比较重要的博客,链接如下:https://dotblogs.com.tw/kkman0 ...