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

    技术2022-07-12  91

    算法性能好坏分析: 时间复杂度 渐近 复杂度分析:时间复杂度 空间复杂度 忽略低阶、常量、系数 代码循环次数最多原则、加法原则、乘法原则 可数的: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循环 还可以递归实现 实现:有序数列中存在重复元素  重复中的第一个: 重复中的最后一个: 第一个大于等于给定值的元素: 最后一个小于等于给定值的元素: 条件和场景:序列必须是有序的;存储必须是数组;数据量太大或太小不适合用二分查找(太小时循环遍历,数据基于数组,连续内存)

    Processed: 0.013, SQL: 9