1.php算法

// 算法
// 1.冒泡排序 => 思路:​每次循环排列出一个最大的数
// echo '<pre>';
$arr = [
1,43,54,62,21,66,32,78,36,76,39
];// function getPao($arr){
$len = count($arr); for($i=1;$i<$len;$i++){ for($j=0;$j<$len-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$tmp = $arr[$j+1];
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}
} }
return $arr;
} // $arr = getPao($arr);
// var_dump($arr); // 2. 选择排序
function selectSort($arr){
for($i=0,$len=count($arr);$i<$len-1;$i++){
$p = $i;
for($j=$i+1;$j<$len;$j++){
if($arr[$p]>$arr[$j]){
$p=$j;
}
}
if($p != $i){
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
var_dump($arr);echo '<br/>';
}
return $arr;
}
$arr = selectSort($arr);exit;
// var_dump($arr);
/*
$arr = [
1,43,54,62,21,66,32,78,36,76,39
];//11
*/
// 3 插入排序
function insertSort($arr){
for($i=1,$len=count($arr);$i<$len;$i++){
$tmp = $arr[$i]; for($j=$i-1;$j>=0;$j--){
if($tmp < $arr[$j]){
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}else{
break;
}
}
// var_dump($arr);echo '<br/>';
}
return $arr;
}
// $arr = insertSort($arr);exit; // var_dump($arr); // 4.快速排序
/*
思路:先对数组进行分割, 把大的元素数值放到一个临时数组里,把小的元素数值放到另一个临时数组里(这个分割的点可以是数组中的任意一个元素值,一般用第一个元素,即$array[0]),然后继续把这两个临时数组重复上面拆分,
最后把小的数组元素和大的数组元素合并起来。这里用到了递归的思想。
*/ function quick_sork($arr){
if (!is_array($arr)) return ; $length = count($arr); if($length<=1) return $arr; $left = $right = []; for($i=1;$i<$length;$i++){
if($arr[$i]<$arr[0]){
$left[] = $arr[$i];
}else{
$right[] = $arr[$i];
}
}
$left = quick_sork($left);
$right = quick_sork($right); return array_merge($left,[$arr[0]],$right);
} $arr = quick_sork($arr); var_dump($arr); // 参考资料:https://www.cnblogs.com/isykw/p/6115461.html // 5. 二分查找法
// 二分查找的数组必须是排列好的
function binSearch($arr,$search){
$height = count($arr)-1; $low = 0;
while($low<=$height){
$mid = floor(($low+$height)/2);// 获取中间数
if($arr[$mid] == $search){
return $mid;
}elseif($arr[$mid] < $search){
$low = $mid+1;
}elseif($arr[$mid] >$search){
$height = $mid-1;
}
}
return '查找失败';
} // $search = binSearch($arr,43);
// var_dump($search); // 二分查找递归实现
function binSearch2($arr,$low,$height,$k){
if($low<=$height){
$mid = floor(($low+$height)/2);
if($arr[$mid] == $k){
return $mid;
}elseif($arr[$mid]<$k){
return binSearch2($arr,$mid+1,$height,$k);
}elseif($arr[$mid]>$k){
return binSearch2($arr,$low,$mid-1,$k);
}
}
return -1;
} $search = binSearch($arr,43);
var_dump($search);

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

  1. 20162311 编写Android程序测试查找排序算法

    20162311 编写Android程序测试查找排序算法 一.设置图形界面 因为是测试查找和排序算法,所以先要有一个目标数组.为了得到一个目标数组,我设置一个EditText和一个Button来添加数 ...

  2. c算法:字符串查找-KMP算法

    /* *用KMP算法实现字符串匹配搜索方法 *该程序实现的功能是搜索本目录下的所有文件的内容是否与给定的 *字符串匹配,如果匹配,则输出文件名:包含该字符串的行 *待搜索的目标串搜索指针移动位数 = ...

  3. LeetCode--二分查找相关算法

    -(1)有一个升序排列的非负数组,要求利用o(logn)的时间复杂度找到数组中确定数字target的第一次出现的位置下标和最后一次出现的位置下标,如果不存在该target返回[-1,-1] 解决方案: ...

  4. Java图片上查找图片算法

    之前用按键精灵写过一些游戏辅助,里面有个函数叫FindPic,就是在屏幕范围查找给定的一张图片,返回查找到的坐标位置. 现在,Java来实现这个函数类似的功能. 算法描述: 屏幕截图,得到图A,(查找 ...

  5. 二分法查找 js 算法

    二分法查找算法:采用二分法查找时,数据需是排好序的.主要思想是:(设查找的数组区间为array[s, e])(1)确定该区间的中间位置m(2)将查找的值T与array[m]比较,若相等,查找成功返回此 ...

  6. 剑指offer 查找和排序的基本操作:查找排序算法大集合

    重点 查找算法着重掌握:顺序查找.二分查找.哈希表查找.二叉排序树查找. 排序算法着重掌握:冒泡排序.插入排序.归并排序.快速排序. 顺序查找 算法说明 顺序查找适合于存储结构为顺序存储或链接存储的线 ...

  7. 字符串查找KMP算法(转)

    如果你用过ctrl+F这个快捷键,那么你有很大的概率使用过这个算法,这就是在待查找字符串(可能有成千上万个字符)中找出模式串(比较小,可能有几个字符),可能找到大于或者等于1次的位置.例如,在abab ...

  8. 字符串查找KMP算法

    如果你用过ctrl+F这个快捷键,那么你有很大的概率使用过这个算法,这就是在待查找字符串(可能有成千上万个字符)中找出模式串(比较小,可能有几个字符),可能找到大于或者等于1次的位置.例如,在abab ...

  9. Java数组排序和查找

    Java 1.2 添加了自己的一套实用工具,可用来对数组或列表进行排列和搜索.这些工具都属于两个新类的"静态"方法.这两个类分别是用于排序和搜索数组的Arrays,以及用于排序和搜 ...

随机推荐

  1. HTML5不允许写结束标记的元素

    HTML5不允许写结束标记的元素 1.area 2.base 3.br 4.col 5.command 6.embed 7.img 8.hr 9.keygen 10.link 11.meta 12.p ...

  2. java 二叉树

    public class BinaryTree { private Node root; /** * 内部类实现结点类,可提高安全性 */ private static class Node{ Nod ...

  3. 【BZOJ3140】消毒(二分图匹配)

    [BZOJ3140]消毒(二分图匹配) 题面 Description 最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a.b.c 均为正 ...

  4. [ZJOI2007]时态同步

    题目描述 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点 ...

  5. IDEA的配置

    一.使用配置 转自:http://blog.csdn.net/qq_27093465/article/details/52918873 setting: 设置外观和字体: 设置编辑器快捷键:   自动 ...

  6. 解决将龙邱oled库移植到野火工程里,oled汉字无法显示问题

    第一,检查oled是否和单片机控制引脚正确相连. GND VCC CLK:时钟信号 miso RST: DC:DATE COMMAND/CONTROL CS:CHIP SELECT 第二,检查工程里是 ...

  7. 访问不了firefox附加组件页面怎么办

    最近重新使用火狐浏览器的时候发现访问不了firefox附加组件页面了,一直是一个空白的页面,估计是被墙的原因,于是网上查了查,说是修改hosts即可,我修改后就可以正常访问了.现在分享出来: 在hos ...

  8. cdlinux可以安装在c盘

    以前一直以为cdlinux只能安装在优盘上,今天发现还可以安装在c盘,也就成了双系统,然后发现这个还是和grub4dos有关,grub4dos好厉害啊,然后不同的制作软件,不管是优盘还是直接安装在电脑 ...

  9. php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别

    if(isset($_POST['submit'])) 它的意思是不是判断是否配置了$_POST['submit'] 这个变量呢?如果有这个变量 在执行其它代码 应该这样用if(isset($_POS ...

  10. nodejs中的require,exports使用说明

    模块是一门语言编写大项目的基石,因此,了解如何组织.编写.编译.加载模块很重要.这里主要谈谈Node中的模块加载. 1.Node中的模块,主要使用require来加载模块,文件 require(&qu ...