php冒泡排序、快速排序、快速查找、二维数组去重实例分享


Posted in PHP onApril 24, 2014

一、冒泡排序

//冒泡排序
function bubble_sort($array)
{
    $count=count($array);
    if($count <= 0){
        return false;
    }
    for($i=0;$i<$count;$i++){
        for($j=0;$j<$count-$i-1;$j++){
            if( $array[$j] > $array[$j+1] ){
                $temp=$array[$j];
                $array[$j]=$array[$j+1];
                $array[$j+1]=$temp;
            }
        }
    }
    return $array;
}

二、快速排序

//快排
function quick_sort($array)
{
    $count=count($array);
    if($count <= 1){
        return $array;
    }
    $key=$array[0];
    $array_left=array();
    $array_right=array();
    for($i=1;$i<$count;$i++){
        if($array[$i] < $key ){
            $array_left[]=$array[$i];
        }else{
            $array_right[]=$array[$i];
        }
    }
    $array_left=quick_sort($array_left);
    $array_right=quick_sort($array_right);
    return array_merge($array_left,array($key),$array_right);
}
$myarray=array(1,5,3,4,12,10,8);
print_r(bubble_sort($myarray));
echo "<br/>";
print_r(quick_sort($myarray));
echo "<br/>";

三、快速查找值第一次出现的位置

/**
 * 快速查找值第一次出现的位置
 * @param array $array          数组
 * @param string $k             要找的值
 * @param int $low              查找范围的最小键值
 * @param int $high             范围的最大键值   
 */
function search($array, $k, $low=0, $high=0)
{    
 //判断是否为第一次调用   
    if(count($array)!=0 and $high == 0){
        $high = count($array);   
    }
    //如果还存在剩余的数组元素
    if($low <= $high){
     //取$low和$high的中间值
        $mid = intval(($low+$high)/2);
        //如果找到则返回
        if ($array[$mid] == $k){
            return $mid;
        }
        //如果没有找到,则继续查找
        elseif ($k < $array[$mid]){
            return search($array, $k, $low, $mid-1);
        }
        else {
            return search($array, $k, $mid+1, $high);
        }
    }
    return -1;
}
$array = array(4,5,7,8,9,10,8);                  //测试search函数 
echo search($array, 8);                          //调用search函数并输出查找结果

四、去掉二维数组重复项

/**
     * 去掉二维数组中的重复项
     * @param $array2D          数组
     * @param $keyArray         还原时字段对应的key
     * @return array            去掉了重复项的数组
     */
    public function array_unique_fb($array2D,$keyArray){
        $temp=array();
        foreach ($array2D as $v){
            $v = join(",",$v);  //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
            $temp[] = $v;
        }
        $temp = array_unique($temp);    //去掉重复的字符串,也就是重复的一维数组
        foreach ($temp as $k => $v){
            //$temp[$k] = explode(",",$v);   //再将拆开的数组重新组装
           $temp[$k]= array_combine($keyArray ,explode(",",trim($v)));
        }
        return $temp;
    }
 
$testArray=array_unique_fb(array(array('a'=>1,'b'=>2,'c'=>3),
    array('a'=>1,'b'=>2,'c'=>3),array('a'=>1,'b'=>2,'c'=>3)),array('a','b','c''));
print_r($testArray);
PHP 相关文章推荐
php下实现农历日历的代码
Mar 07 PHP
php遍历所有文件及文件夹的方法深入解析
Jun 08 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
php实现的通用图片处理类
Mar 24 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
PHP微信红包API接口
Dec 05 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
PHP PDOStatement::getAttribute讲解
Feb 01 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 PHP
laravel 实现上传图片到本地和前台访问示例
Oct 21 PHP
php获取中文拼音首字母类和函数分享
Apr 24 #PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 #PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 #PHP
php计算当前程序执行时间示例
Apr 24 #PHP
php实现的百度搜索某地天气的小偷代码
Apr 23 #PHP
php url路由入门实例
Apr 23 #PHP
通过curl模拟post和get方式提交的表单类
Apr 23 #PHP
You might like
PHP4实际应用经验篇(6)
2006/10/09 PHP
php生成EXCEL的东东
2006/10/09 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
微信小程序之选项卡的实现方法
2017/09/29 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python3中int(整型)的使用教程
2017/03/23 Python
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
解析python实现Lasso回归
2019/09/11 Python
python opencv如何实现图片绘制
2020/01/19 Python
为什么相对PHP黑python的更少
2020/06/21 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
canvas 如何绘制线段的实现方法
2018/07/12 HTML / CSS
新教师培训心得体会
2014/09/02 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
信用卡工资证明范本
2015/06/19 职场文书
个人售房合同协议书
2016/03/21 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS