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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Sep 05 PHP
深入PHP操作MongoDB的技术总结
Jun 02 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
php的zip解压缩类pclzip使用示例
Mar 14 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
php封装的smarty类完整实例
Oct 19 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
php利用imagemagick实现复古老照片效果实例
Feb 16 PHP
Laravel 批量更新多条数据的示例
Nov 27 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
Dec 04 PHP
如何运行/调试你的PHP代码
Oct 23 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
PHP中header和session_start前不能有输出原因分析
2013/01/11 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
给文字加上着重号的JS代码
2013/11/12 Javascript
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
js实现删除li标签一行内容
2019/04/16 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
2019/11/04 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
python脚本设置系统时间的两种方法
2016/02/21 Python
3分钟学会一个Python小技巧
2018/11/23 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
python使用配置文件过程详解
2019/12/28 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
求职信需要的五点内容
2014/02/01 职场文书
教师个人培训总结
2015/02/11 职场文书
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技