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之第四天
Oct 09 PHP
杏林同学录(八)
Oct 09 PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
深入解析PHP中的(伪)多线程与多进程
Jul 01 PHP
xss防御之php利用httponly防xss攻击
Mar 21 PHP
ThinkPHP CURD方法之order方法详解
Jun 18 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
Yii实现自动加载类地图的方法
Apr 01 PHP
PHP内核探索之解释器的执行过程
Dec 22 PHP
thinkPHP框架中执行原生SQL语句的方法
Oct 25 PHP
php实现微信小程序授权登录功能(实现流程)
Nov 13 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 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
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
php中让人头疼的浮点数运算分析
2016/10/10 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
可输入的下拉框
2006/06/19 Javascript
JS之小练习代码
2008/10/12 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
react-router中的属性详解
2017/06/01 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
Python Pandas 转换unix时间戳方式
2019/12/07 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
巴西手表购物网站:eclock
2019/03/19 全球购物
高二物理教学反思
2014/02/08 职场文书
初一新生军训方案
2014/05/22 职场文书
服装仓管员岗位职责
2014/06/17 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书
零基础学java之循环语句的使用
2022/04/10 Java/Android
Python实现简单得递归下降Parser
2022/05/02 Python
win sever 2022如何占用操作主机角色
2022/06/25 Servers