自我对冒泡排序以及对快速排序的理解

首先呢,我们闲话少说,直接入主题吧

冒泡:其实冒泡就是一组数据,让它们左右两位进行排序,若数组的要求是要从大到小排序,那么就让小的数与大的数交换位置,交换位置就是根据for里面的key值进行交换,但是还有一点就是不得不提的就是,我们需要给这个排序一个标志,在排序的开始,我们让这个标志位false,最后再for里面进行交换位置的时候,我们再把这个标志换成true

代码如下:

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('12','44','1','84','5');
$bb = maopao($shuz);
print_r($bb);
echo "<br/>";


接下来,我们说一下,那个快速排序法
其实相比而言的话,我个人认为这个快速比这个冒泡法方便一下,好了,闲话少说,直入主题
首先快速排序法,它所进行排序的根据,就是这个数组里面的一个基数,一般我们都会取这组数组的最后
一个元素或者第一元素作为这个被比较的基数,我们需要创建两个数组,然后再for里面,让其他值分别与
该基数进行比较,若大于基数则就放到一个数组里面,若小于的话就放到另一个数组里面,最后呢,我们
再用array_merge函数将这三个数组拼成一个数组,这便是排序
代码如下:

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));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A_青涩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值