基本排序算法

冒泡排序

/**
 * 实现思路:
 * 双重循环,外层控制冒泡论数。
 * 内层控制每轮冒泡的比较次数。
 **/
function bubble_sort( $array)
{
    $count = count( $array);
    for( $i=0; $i< $count-1; $i++){
        for( $j=0; $j < $count-$i-1; $j++){
            if( $array[$j] > $array[$j+1]){
                $tmp = $array[$j];
                $array[$j] = $array[$j+1];
                $array[$j+1] = $tmp;
            }
        }
    }
    return $array;
}

选择排序

/**
 * 实现思路:
 * 双重循环,外层控制轮数,内层控制比较次数。
 * 
 * 假设最小为第一个,然后循环找出最小值。
 * 外层循环进行交换
 **/
function select_sort( $array)
{
    $count = count( $array);
    for( $i=0;$i< $count-1; $i++){
        $m = $i;
        for( $j=$i+1; $j < $count; $j++){
            if( $array[$m] > $array[$j]){
                $m = $j;
            }
        }
        if( $m != $i){
            $tmp = $array[$i];
            $array[$i] = $array[$m];
            $array[$m] = $tmp;
        }
    }
    return $array;
}

插入排序

/**
 * 双重循环,外层控制轮数,内层循环控制,比较并插入。
 * 选择当前数。
 * 内层循环与前一个数对比大小,进行交换。
 **/
function insert_sort( $array)
{
    $count = count( $array);
    for( $i=1;$i < $count; $i++){
        $tmp = $array[$i];
        for( $j=$i-1; $j >= 0; $j--){
            if( $tmp < $array[$j]){
                $array[$j+1] = $array[$j];
                $array[$j] = $tmp;
            }else{
                break;
            }
        }
    }
    return $array;
}

快速排序

/**
 * 先判断是否继续运行
 * 选择一个基础数,然后循环对比区分大小放入两个数组
 * 递归排序两个数组
 * 合并左边、基础数、右边
 **/
function quick_sort( $array)
{
    $count = count( $array);
    if( $count <= 1){
        return $array;
    }
    $tmp = $array[0];
    $left = $right = [];
    for( $i=1; $i<$count; $i++){
        if( $array[$i] < $tmp){
            $left[] = $array[$i];
        }else{
            $right[] = $array[$i];
        }
    }
    $left = quick_sort( $left);
    $right = quick_sort( $right);
    return array_merge( $left, array( $tmp),$right);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值