梦想之家

PHP实现冒泡排序

直接上代码,下面演示的是从低到高排序,也可以新增参数DESC变成从高到低排序

$mpArr = array(10,2,4,6,3,1,3,2,5,9,8,7);
$mpArr = maopao($mpArr);
print_r($mpArr);

/**
 *
 * 用从小到高的排序说明逻辑:这里我们就需要两次用到for循环。通过第一个for循环来控制数据比较的轮次数,然后通过第二个for循环来控制次数并判断大小交换位置。那么这里的if语句判断的思路就是,如果当前值大于后面的值,就交换位置,把大的值给临时变量$tmpVal。后面的小值替换大值,大值替换小值。
 * @param $arr
 * @param string $type
 */
public function maopao($arr,$type='ASC'){
    $len = count($arr);
    $n = $len-1;
    for ( $i=0; $i<$len; $i++ ){
        for ( $j = 0;$j<$n;$j++ ){
            switch ($type){
                case 'ASC': //从小到大排序
                    //当前值大于下个值
                    if( $arr[$j] > $arr[ $j+1 ] ){
                        //如果当前的值大于下一个值,放到一个临时数组里
                        $tmpVal = $arr[$j];
                        //把下一个值替换当前的值
                        $arr[$j] = $arr[$j+1];
                        //把当前值替换下一个值 ,即两个位置互换
                        $arr[$j+1] = $tmpVal;
                    }
                    break;
                case 'DESC': //从大到小排序
                    //当前值小于下个值
                    if( $arr[$j] < $arr[$j+1] ){
                        //当前值放到临时数组
                        $tmpVal = $arr[$j];
                        //把当前值替换成下个
                        $arr[$j] = $arr[$j+1];
                        //下个值替换成当前值,位置互换
                        $arr[$j+1] = $tmpVal;
                    }
                    break;
            }
        }
    }
    return $arr;
}


相关推荐

您此刻的心情: