dmz社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1894|回复: 15

[功能实现] php 冒泡排序 快速排序

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 237 天

    [LV.7]常住居民III

    4425

    主题

    1432

    帖子

    9869

    积分

    会|员

    Rank: 9Rank: 9Rank: 9

    积分
    9869
    发表于 2019-5-14 22:26:46 | 显示全部楼层 |阅读模式

    本站资源全部免费,回复即可查看下载地址!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    1)冒泡排序:两两交换数值,最小的值在最左边,就如最轻的气泡在最上边。
    2)对整列数两两交换一次,最小的数在最左边,每次都能得一个在剩下的数中的最小 的数,“冒”出来的数组成一个有序区间,剩下的值组成一无序区间,且有序区间中每一元素值都比无序区间的小。
    3)快速排序:基准数,左右二个数组,递归调用,合并。
    4)插入排序:排序区间分成二部分,左边有序,右边无序,从右区间取第一个元素插入左区间,若此元素比左边区间最右边的元素大,留在原处,若此元素比左 边区间最右边的元素小,则插在最右边5)元素的原位置,同时最右边元素右移一位,计算器减一,重新和前面的元素比较,直到前面的元素比要插入元素小为止,重复 上述步骤。
    6)注意区间端点值的处理,及数组的第一个元素下标为0.
    [PHP] 纯文本查看 复制代码
    $a=array('3','8','1','4','11','7');
    print_r($a);
    $len = count($a);
    //从小到大
    for($i=1;$i<$len;$i++)
    {
    for($j=$len-1;$j>=$i;$j--)
    if($a[$j]<$a[$j-1])
    {//如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了
     $x=$a[$j];
     $a[$j]=$a[$j-1];
     $a[$j-1]=$x;
    }
    }
    print_r($a);
    //另一种方法 从小到大
    $b=array('4','3','8','9','2','1');
    $len=count($b);
    for($k=1;$k<$len;$k++)
    {
    for($j=$len-1,$i=0;$i<$len-$k;$i++,$j--)
    if($b[$j]<$b[$j-1]){
    //如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了
     $tmp=$b[$j];
     $b[$j]=$b[$j-1];
     $b[$j-1]=$tmp;
    }
    print_r($b);
    echo "
    ";
    }
    //下面的这个执行效率更高
    function maopao($arr)
    {
     $len = count($arr);
     for($i=1; $i<$len; $i++)//最多做n-1趟排序
     {
      $flag = false;    //本趟排序开始前,交换标志应为假
      for($j=$len-1;$j>=$i;$j--)
      {
       if($arr[$j]<$arr[$j-1])//交换记录
       {//如果是从大到小的话,只要在这里的判断改成if($arr[$j]>$arr[$j-1])就可以了
         $x=$arr[$j];
         $arr[$j]=$arr[$j-1];
         $arr[$j-1]=$x;
         $flag = true;//发生了交换,故将交换标志置为真
       }
      }
      if(! $flag)//本趟排序未发生交换,提前终止算法
      return $arr;   
     }
    }
    $shuz = array('2','4','1','8','5');
    $bb = maopao($shuz);
    print_r($bb);
    // 快速排序
    function kuaisu($arr){
        $len = count($arr);
        if($len <= 1){
            return $arr;
        }
        $key = $arr[0];
        $left_arr = array();
        $right_arr = array();
        for($i=1; $i<$len;$i++){
            if($arr[$i] <= $key){
                $left_arr[] = $arr[$i];
            }else{
                $right_arr[] = $arr[$i];
            }
        }
        $left_arr = kuaisu($left_arr);
        $right_arr = kuaisu($right_arr);
        return array_merge($left_arr, array($key), $right_arr);
    }
    $arr = array(23,98,54,2,9,62,34);
    print_r(kuaisu($arr));

    回复

    使用道具 举报

    该用户从未签到

    17

    主题

    7958

    帖子

    986

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    986

    发表于 2019-5-16 10:06:09 | 显示全部楼层
    谢谢楼主,共同发展

    该用户从未签到

    30

    主题

    7851

    帖子

    1002

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    1002

    发表于 2019-5-19 14:58:39 | 显示全部楼层
    过来看看的

    该用户从未签到

    4

    主题

    3452

    帖子

    10

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    10

    发表于 2019-5-23 07:48:12 | 显示全部楼层
    不错不错,楼主您辛苦了。。。

    该用户从未签到

    51

    主题

    7829

    帖子

    989

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    989

    发表于 2019-5-23 21:10:53 | 显示全部楼层
    路过,学习下

    该用户从未签到

    3

    主题

    7704

    帖子

    1025

    积分

    技冠群雄

    Rank: 6Rank: 6

    积分
    1025

    发表于 2019-5-26 11:48:41 | 显示全部楼层
    不错不错,楼主您辛苦了。。。

    该用户从未签到

    51

    主题

    7829

    帖子

    989

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    989

    发表于 2019-5-28 17:25:02 | 显示全部楼层
    这是什么东东啊

    该用户从未签到

    30

    主题

    7851

    帖子

    1002

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    1002

    发表于 2019-5-31 22:59:48 | 显示全部楼层
    有道理。。。

    该用户从未签到

    1

    主题

    3582

    帖子

    -8

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    -8

    发表于 2019-6-7 07:40:41 | 显示全部楼层
    路过,支持一下啦

    该用户从未签到

    30

    主题

    7851

    帖子

    1002

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    1002

    发表于 2019-6-7 10:28:18 | 显示全部楼层
    么有分,谁能送我点积分啊::>_<::
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|本站代理|dmz社区

    GMT+8, 2024-4-26 13:23 , Processed in 0.138974 second(s), 39 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表