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. Flex中单选按钮控制表格中的列的增加或减少

    1.问题背景 单选按钮有"苹果"和"香蕉"两个,表格中的列有星期.苹果.香蕉和苹果比率,选择了"苹果"单选按钮,表格显示星期.苹果和苹果比率 ...

  2. Halcon异常(C++)不起作用

    现象 Halcon导出的C++程序,try catch不到异常.在Halcon下可以正常Catch到异常.  C++代码:try{   tuple_max(hv_Length, &hv_Max ...

  3. WebForm 生成并显示二维码

    Generate and display QRCode in WebForm. 项目引用 QRCoder生成并显示 QRCode 项目引用 QRCoder How to use QRCoder Via ...

  4. [BZOJ1001] [Beijing2006] 狼抓兔子 (最短路)

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...

  5. iOS开发--XMPPFramework--好友模块(四)

    创了一个XMPP即时通讯交流群140147825,欢迎大家来交流~我们是一起写代码的弟兄~ 前面几篇,我们讨论了环境的配置,框架的导入和用户登陆,这一篇我们来说说好友模块. 在进入正题之前,我们来说下 ...

  6. data数据不一致的问题

    经常会遇到that.data能打印出来(能访问到),而that.data.xxx不能打印(为空)的情况.特别是在调用了云方法,然后setData的时候,为什么会出现这样的情况不明. 解决方法,将需要用 ...

  7. JavaWeb开发环境搭建Eclipse配置Tomcat

    转载请标明出处:http://blog.csdn.net/wu_wxc/article/details/48651251本文出自[吴孝城的CSDN博客] 工具: Eclipse官网下载:http:// ...

  8. 八年架构师大咖首次揭秘,年薪50W秘籍!

    序言 我是土生土长的老北京人,你们肯定觉得我很有钱,为啥呢? 因为觉得我是北京户口,其实你们错了,我的房子是靠我自己买的,父母基本上没帮到我什么,当然,我也不需要吧! 我只想说,作为一名程序员,我很自 ...

  9. Handsontable的前端分页与数据库分页

    Handsontable虽然处理速度很快,但当数据量达到10W+的时候很容易导致浏览器内存泄漏,这时候可以用分页来解决.官网提供了前端分页demo,测试后发现也只能处理低于10W的数据,而且调试的时候 ...

  10. 与JavaWeb有关的故事(web请求与Java I/O)

    作为一名后端屌丝程序员,对算法.并发.性能乐此不疲.但是,随着年龄和阅历的增加,显然叶落而不知秋的心态是不太能混了.尤其是,某T面试官在明知我是后端,且明确表示对HTTP协议不太熟的情况下,强行让我解 ...