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
谈谈PHP语法(3)
Oct 09 PHP
PHP 各种排序算法实现代码
Aug 20 PHP
php快速url重写更新版[需php 5.30以上]
Apr 25 PHP
php 模拟get_headers函数的代码示例
Apr 27 PHP
php设计模式之简单工厂模式详解
Sep 04 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
深入理解PHP中的empty和isset函数
May 26 PHP
浅谈PHP链表数据结构(单链表)
Jun 08 PHP
php中实现字符串翻转的方法
Feb 22 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 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
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
JavaScipt基本教程之JavaScript语言的基础
2008/01/16 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
js中的面向对象入门
2017/03/06 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
2017/10/17 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
python字典排序实例详解
2015/05/20 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
python放大图片和画方格实现算法
2018/03/30 Python
Flask入门之上传文件到服务器的方法示例
2018/07/18 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
Under Armour安德玛荷兰官网:美国高端运动科技品牌
2019/07/10 全球购物
运动会口号16字
2014/06/07 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
四年级学生期末评语
2014/12/26 职场文书
公司员工手册范本
2015/05/14 职场文书
详解Python中下划线的5种含义
2021/07/15 Python