• 冒泡算法和快速排序算法实现和比较


    <?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倍

  • 相关阅读:
    STM32 IAP程序 源码 和测试代码 有详细的中文注释
    mysql读写分离配置,利用mybatis实现,解释为什么dynamicDataSource不行
    mysql主从复制的配置总结
    Chapter 2 Open Book——7
    leetcode415---字符串大数相加
    Chapter 2 Open Book——6
    leetcode83,删除有序链表中的重复元素
    Chapter 2 Open Book——5
    Chapter 2 Open Book——4
    leetcode24,交换链表相邻的节点
  • 原文地址:https://www.cnblogs.com/feiyujinghong/p/6283805.html
Copyright © 2020-2023  润新知