算法和数据结构决定上限
算法:algorithm 解决问题的方法
一系列解决问题得,清晰得,可执行的计算机指令
特征cccccc
1、有限性
2、确定性:不会产生二义性 唯一
3、可行性 例如最大质数 但质数无穷得
4、输入 例如 休眠5分钟
5、输出 如果休眠5分钟则表示输出 抽象概念
排序算法
让数据有序
插入排序法
排好序,让当前排序元素与左边元素比较插入
重要特性
有序的话就会变成O(n)
整体,插入排序复杂度依然是O(n^2)
必须最坏情况,不能只计算最优解
冒泡排序法
选择排序法
先把最小拿出来 ⭐最⭐
剩下的,再把最小的拿出来
剩下的,再把最小的拿出来
复杂度永远O(n^2)
。。。。
每次把还没处理的元素里最小的元素
排序过程占用额外空间 =>原地排序
推荐方法:
实现选择排序法
使用带约束泛型
使用Compareable接口
选择排序法复杂度分析
希尔排序法
快速排序法
归并排序法
堆排序
计数排序
桶排序
技术排序
线性数据结构
动态数组
链表
栈
队列
哈希表
高级数据结构
线段树
并查集
Trie
SQRT分解
查找算法
线性查找
如何适应更多数据类型
如何编写正确程序
如何性能测试
如何复杂度分析
案例:
在一打试卷中,找到属于自己那张试卷
第一张:不是
第二张:不是
第三张:不是
。。。
第十二张:是
案例:
在data数组中查找16
使用i++循环
数组 data
目标元素16
索引为4
代码:int
代码:泛型
使用泛型 不可以是基本数据类型,只能是类对象
boolean byte char short int long float double
每个基本数据类型都有对应包装类
Boolean Byte Character Short Integer Long Float Double
案例 设计一个student类
循环不变量
复杂度分析
复杂度分析:表示算法的性能
多方面分析
性能和数据规模n呈正比
O(n) 常数不重要
复杂度描述的是随着数据规模n的增大,算法性能的变化趋势
T=c1*n+c2
常见算法复杂度