程序 = 数据结构+算法
什么是算法
解决问题的思想步骤
算法与数据结构
算法的设计:取决于选定的逻辑结构
算法的实现:取决于选定的存储结构
算法的特性
有穷性 —— 算法执行的步骤(或规则)是有限的;
确定性 —— 每个计算步骤无二义性;
可行性 —— 每个计算步骤能够在有限的时间内完成;
输入 —— 算法有零个或多个外部输入;
输出 —— 算法有一个或多个输出。
如何评价算法的好坏
1、消耗时间的多少(时间复杂度,越少越好)
2、消耗存储空间的多少(空间复杂度)
3、容易理解、容易编程和调试,容易维护
时间复杂度
时间复杂度:算法中可执行语句重复执行频度和,记为T(n)
语句频度:可执行语句再算法(或程序)中重复执行的次数
T(n)=O(f(n))
T(n):问题规模的时间函数
n:问题的规模(处理多少个数据)
O:时间数量级
f(n):算法中可执行语句重复的次数
计算O的方法
1、根据问题规模写出n的表达式 f(n) = n^2/2+n/2
2、如果有常数项,将其置为1(注意:f(n)表达式中有常数项的时候才可以使用)
3、只保留最高项,其他项舍去 f(n) = n^2/2
4、如果最高项数不为1,将其置为1 f(n) = n^2
查找
顺序查找 二分查找
hash查找
排序
冒泡排序
选择排序
插入排序
快速排序(递归)