算法1:递归 排序 二分查找(复习总结)

算法性能好坏分析
时间复杂度 渐近
复杂度分析:时间复杂度 空间复杂度
忽略低阶、常量、系数
代码循环次数最多原则、加法原则、乘法原则
可数的:o(1)
线性的:o(n)
对数:o(logn) o(nlogn)

最好/最坏/平均时间复杂度

空间复杂度 渐近
o(1) o(n) o(n2)

递归算法思想:
概念 条件 问题 递归和循环 常见应用
概念:编程技巧 递回 recursion 递+归 去+回 递推公式
条件:规律(递归表达式);出口(终止条件)
问题:堆栈溢出(递归深度大,临时变量进入栈,内存不够),不要让递归次数过多; 重复计算(斐波那契数列 1 1 2 3 5 8 13)
递归和循环:静中有动,有去有回;动静如一,有去无回
循环都可写成递归,递归未必能写成循环
耗时较多,重复计算 
递归的应用:阶乘问题
BigInteger== big int
数组存大数 一种思路 
递归算法应用 目录拷贝

排序
o(n) o(n2)
标准:时间复杂度:把低阶、系数、常数也考虑; 空间复杂度:in-place原地排序,out-place占用额外内存; 稳定性:相同元素原有的先后顺序不变
有:冒泡 插入 选择 o(n2); 归并 快速 o(nlogn); 桶 计数 基数 o(n)属于线性排序
冒泡bubbleSort:两个位置交换,每次冒泡,有1个到最终位置       时间复杂度 最好o(n) 最坏o(n2); 空间: o(1)原地; 稳定 
插入insertion sort:每个依次插入到排好序的里面; 已排序:首元素  未排序区间     时间复杂度:最好o(n) 最坏o(n2); 空间:o(1)原地;  稳定
选择selection sort:所有里选最值放最前面 以此类推; 已排序区间:初始为空  未排序区间   时间复杂度:最好o(n2) 最坏o(n2); 空间:o(1)原地; 不稳定??
归并merge sort排序:分治思想  用递归思想来实现。分解+合并   时间复杂度:o(n*logn)  空间:o(n) out-place非原地;  稳定
快速排序quick sort:归并思想 分区点(随机选)pivot  一分为3 分治+递归  时间复杂度:好:o(n); 坏:o(n2)  空间:o(1) 原地; 不稳定
桶排序bucket sort: 桶-容器 元素值域的划分;待排序元素映射到对应桶上
    bucketSize 几种,重复不管(如100个3);找出元素中最大值和最小值  时间复杂度o(n) 极端情况是o(nlogn); 空间复杂度:o(N+M) M代表桶个数 空间换时间;是否稳定:取决于桶内元素排序算法
计数排序countingSort:桶排序的延伸,开辟数组,下标的元素个数(统计结果)。输出

二分查找:原理和思想 时间复杂度 实现方法 使用条件及场景
Binary search折半查找例子:猜数字 
有序数据 检索区间一半
时间复杂度:o(logn) <常量级复杂度为o(1)
实现:有序数列中不存在重复元素
数组下标 low:指针 序列第一个位置; high:指针 序列最后一个位置; mid:(low+high)/2  while循环 还可以递归实现
实现:有序数列中存在重复元素 
重复中的第一个:
重复中的最后一个:
第一个大于等于给定值的元素:
最后一个小于等于给定值的元素:
条件和场景:序列必须是有序的;存储必须是数组;数据量太大或太小不适合用二分查找(太小时循环遍历,数据基于数组,连续内存)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值