时间空间复杂度 冒泡 选择 快速排序

本文深入探讨了排序算法中的三种经典方法:冒泡排序、选择排序和快速排序。详细介绍了每种算法的工作原理、实现过程及时间复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复杂度
算法复杂度分为 时间复杂度和空间复杂度
时间复杂度是指执行算法所需要的计算工作量
空间复杂度是指执行这个算法所需要的内存空间

定义
算法中重复操作执行次数 是问题规模 n 的某个函数 , 用 T(n) 表示 , 有某个辅助函数 f(n)
使得当 n 趋近于无穷大时 T(n)/f(n)的 极限值 为不等于 0 的常数
则称 f(n) 是 T(n) 同数量级函数 记做 T(n) = O(f(n)) 为时间复杂度

算法
$arr = array(3,4,21,321,33,56,6,7,8,3,1);

/**
 * 冒泡排序
 * 当前元素与后一位元素做比较如果当前元素 大于(小于)后位元素则做交换
 * 1.外层循环控制循环次数
 * 2.内容循环使两两比较 
 * 3.$len-$i -1 因 $i 为已经循环了的,所以没必要重复循环;因最后一位后没有可比较   
 * 的数 所以要长度 -1
 * @return $arr
 */
function maoPao($arr){
    $len = count($arr);
    if($len < 2){
        return $arr;
    }
    for($i=0;$i<$len;$i++){
        for($j=0;$j<$len-$i-1;$j++){
            if($arr[$j] < $arr[$j+1]){
                $tmp = $arr[$j+1];
                $arr[$j+1] = $arr[$j];
                $arr[$j] = $tmp;
            }
        }
    }
    return $arr;
}

echo '<\pre>';
print_r(maoPao($arr));
exit;


/**
 * 选择排序
 * 外层循环 控制循环次数 每次循环将当前元素作为 最小/最大 与其后面所有数比较
 */
function selectSort($arr){
    $len = count($arr);
    if($len < 2){
        return $arr;
    }
    for($i=0;$i<$len;$i++){
        $m = $i;
        for($j=$i+1;$j<$len;$j++){
            if($arr[$m] < $arr[$j]){
                $m = $j;
            }
        }
        if($m != $i){
            $tmp = $arr[$i];
            $arr[$i] = $arr[$m];
            $arr[$m] = $tmp;
        }
    }
    return $arr;
}

echo '<pre>';
print_r(selectSort($arr));
exit;

/**
 * 快速排序
 * 基于二分思想的排序算法
 */
function quickSort($array){
    $len = count($array);
    if(!$len){
        return $array;
    }
    $key = $array[0];
    $leftArr = array();
    $rightArr = array();
    for($i=1;$i<$len;$i++){
        if($array[$i] >= $key){
            $rightArr[] = $array[$i];
        }else{
            $leftArr[] = $array[$i];
        }
    }
    $leftArr = quickSort($leftArr);
    $rightArr = quickSort($rightArr);

    return array_merge($leftArr, array($key), $rightArr);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值