PHP实现快速排序

46 篇文章 0 订阅
快速排序思想:

1.选取数组中一个元素作为比较对象,一般选取第一个元素(为避免发生最坏情况可选择第一个元素、最后一个元素和中间元素的平均值作为比较对象)。

2.遍历数组,将小于比较对象的元素放入一个数组,将大于等于比较对象的元素放入另一个数组。

3.然后在按此方法分别对这两部分数据进行快速排序(递归实现)。

4.将排序好的数组合并成一个数组。

PHP代码实现:
<?php

//带排序数组
$arr = array(4,5,2,5,7,9,8,1,23,5,2,6,8,3);

function my_sort($arr){
    //获取数组长度
    $len = count($arr);

    //长度不足1 直接return
    if($len <= 1){
        return $arr;
    }else{
        
        //新建两个数组,分别存比数组中第一个元素小和比第一个元素大的值
        $arr_left = array();
        $arr_right = array();
        
        //从第二个元素开始循环,与数组第一个元素比较
        for($i = 1;$i< $len;$i++){
            //把比第一个元素小的放到$arr_left中,反之放到$arr_right中
            if($arr[$i] < $arr[0]){
                $arr_left[] = $arr[$i];
            }else{
                $arr_right[] = $arr[$i];
            }
        }
        //将$arr_left与$arr_right分别排序后再与$arr[0]合并成一个数组,即为排序好的数组
        return array_merge(my_sort($arr_left),array($arr[0]), my_sort($arr_right));
    }
}

var_dump(my_sort($arr));

//输出:
//    array
//    0 => int 1
//    1 => int 2
//    2 => int 2
//    3 => int 3
//    4 => int 4
//    5 => int 5
//    6 => int 5
//    7 => int 5
//    8 => int 6
//    9 => int 7
//    10 => int 8
//    11 => int 8
//    12 => int 9
//    13 => int 23


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值