zoukankan      html  css  js  c++  java
  • 冒泡算法和快速排序算法实现和比较

    <?php

    //要进行排序的数组
    $example = array(7,5,6,9,3,4,2,1,7,10,15,12,2,32,1,2,13,123,2,2,546,53,4,2,2,43,4,54,3,43,5,345,45,3,3,243,21,44,124,2,4,32432);

    /**
    * 冒泡算法
    * 算法思路是将每个相邻的元素进行比较,然后根据值的大小判断是否进行位置互换
    * 算法复杂度O(n^2)
    * @param $sort DESC || ASC
    */

    function maopao($example,$sort){
    $count = count($example);
    for($i=0;$i<$count;$i++){
    for($a=1;$a<$count;$a++){
    $temp = $example[$a];
    if($sort == "DESC" && $example[$a] > $example[$a-1]){
    //位置互换
    $example[$a] = $example[$a-1];
    $example[$a-1] = $temp;
    }
    if($sort == "ASC" && $example[$a] < $example[$a-1]){
    //位置互换
    $example[$a] = $example[$a-1];
    $example[$a-1] = $temp;
    }
    }
    }
    return $example;
    }

    /**
    * 快速排序法
    * 算法思路是将随意挑选其中一个元素,大于/小于该元素的元素 靠左/右(DESC/ASC)
    * 然后再将左右两个元素进行相同规则的递归之后,最后合并数组
    * 算法复杂度O(<=n)
    */
    function fastSort($example,$sort){
    //取第一个元素作为参考元素
    $flags = $example[0];
    $count = count($example);
    $left = array();
    $right = array();
    for($i = 0;$i<$count;$i++){
    if($sort == "DESC"){ //倒序
    if($example[$i] > $flags){
    $left[] = $example[$i];
    }else if($example[$i] < $flags){
    $right[] = $example[$i];
    }
    }

    if($sort == "ASC"){ //正序
    if($example[$i] < $flags){
    $left[] = $example[$i];
    }else if($example[$i] > $flags){
    $right[] = $example[$i];
    }
    }
    }
    if(!empty($left))
    $left = fastSort($left,$sort);
    if(!empty($right))
    $right = fastSort($right,$sort);
    //返回合并后的数组
    return array_merge($left,array($flags),$right);
    }

    //设置最大执行时间
    set_time_limit(0);
    //函数嵌套调用次数设置无限次
    ini_set("xdebug.max_nesting_level",0);
    $i=0;
    while($i < 1000){
    $example[] = $i;
    $i++;
    }

    $start = microtime(true);
    $ret = fastSort($example,"DESC");
    print_r("快速排序法,耗时:");
    echo (microtime(true) - $start);

    $start = microtime(true);
    $ret = maopao($example,"DESC");
    print_r("冒泡排序法,耗时:");
    echo (microtime(true) - $start);

     同服务器下经过1000个数组量进行比较,快速排序法是冒泡法速度的7倍

  • 相关阅读:
    sublime tex创建可服用的片段
    php unset
    使用VS.NET来制作安装程序
    手机暗码大全.(挺好玩的..)
    【转】双目运算符 "??"
    linuxcp命令
    ios——在iPhone程序中打开其它程序
    IOS地图项目01网络编程很难么???
    C# BitArray 实例
    Windows Phone 8使用初体验
  • 原文地址:https://www.cnblogs.com/feiyujinghong/p/6283805.html
Copyright © 2011-2022 走看看