五大基本特征
- 输入:最少有0个或者多个输入。
- 输出:至少有一个输出。
- 有穷性:算法的每步必须是有限的,不能出现无限的循环,并且每个步骤的执行时间也是在可以接受的范围内。
- 确定性:算法的每步必须都有确定的意义(无歧义),在一定条件下只能有一条执行路径。
- 可行性:算法的每步必须都是可行的,每步都可以通过有限的执行次数完成。
设计要求
- 正确性:算法至少具备输入,输出和加工处理的无歧义性,能够正确的反应问题的需求并得到正确的答案。
- 可读性:
- 健壮性:当输入的数据不合理时,也能做出相应的处理,而不产生异常、崩溃等莫名奇妙的结果。
- 时间效率高,存储低。
排序算法
1.选择排序
定义:每次循环找出当前循环中最小的元素,然后和此次循环中的队首元素进行交换。
2.冒泡排序
定义:每次循环都比较前后两个元素大小,如果前者大于后者,则将两者进行交换。这样做会将每次循环中最大的元素替换到末尾,逐渐形成有序集合。将每次循环中的最大元素逐渐由队首转移到队尾的过程形似“冒泡”过程,故因此得名。
注意:当在一次循环中没有发生交换时,则可以立即退出当前循环,结束排序。
3.插入排序
定义:在先前排好序的子集合中插入下一个待排的元素,每次都会判断待排元素的上一个元素是否大于待排元素,如果大于则将待排元素往左移,接着与上一个元素比较,直到找到待排元素应该插入的位置。
时间复杂度总汇
排序算法
序号 | 排序算法 | 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 | 排序方式 | 稳定性 |
---|---|---|---|---|---|---|---|
1 | 冒泡排序 | O ( n 2 ) O(n^{2}) O(n2) | O ( n ) O(n) O(n) | O ( n 2 ) O(n^2) O(n2) | O(1) | In-place | 稳定 |
2 | 选择排序 | O ( n 2 ) O(n^2) O(n2) | O ( n 2 ) O(n^2) O(n2) | O ( n 2 ) O(n^2) O(n2) | O ( 1 ) O(1) O(1) | In-place | 不稳定 |
3 | 插入排序 | O ( n 2 ) O(n^2) O(n2) | O ( n ) O(n) O(n) | O ( n 2 ) O(n^2) O(n2) | O ( 1 ) O(1) O(1) | In-place | 稳定 |
4 | 希尔排序 | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g 2 n ) O(nlog^2n) O(nlog2n) | O ( n l o g 2 n ) O(nlog^2n) O(nlog2n) | O ( 1 ) O(1) O(1) | In-place | 不稳定 |
5 | 归并排序 | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n ) O(n) O(n) | Out-place | 稳定 |
6 | 快速排序 | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n 2 ) O(n^2) O(n2) | O ( l o g n ) O(logn) O(logn) | In-place | 不稳定 |
7 | 堆排序 | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( 1 ) O(1) O(1) | In-place | 不稳定 |
8 | 计数排序 | O ( n + k ) O(n+k) O(n+k) | O ( n + k ) O(n+k) O(n+k) | O ( n + k ) O(n+k) O(n+k) | O ( k ) O(k) O(k) | Out-place | 稳定 |
9 | 桶排序 | O ( n + k ) O(n+k) O(n+k) | O ( n + k ) O(n+k) O(n+k) | O ( n 2 ) O(n^2) O(n2) | O ( n + k ) O(n+k) O(n+k) | Out-place | 稳定 |
10 | 基数排序 | O ( n ∗ k ) O(n*k) O(n∗k) | O ( n ∗ k ) O(n*k) O(n∗k) | O ( n ∗ k ) O(n*k) O(n∗k) | O ( n + k ) O(n+k) O(n+k) | Out-place | 稳定 |
概念
分治思想
定义:当一个问题的规模较大不易求解时,就可以考虑 将问题分成 几个小的模块,逐一解决。
递归
定义:在运行的过程中不断的调用自己。
注意:必须有结束的条件。
缺点:效率低。
知识点
前缀表达式
又名:波兰记法、波兰表达式、前序表达式。
定义:就是不用任何括号的后缀表达式。每遇到一个运算符就取该运算符的前面两个数据进行运算。
示例:(1-2)*(4-5)=> *- 1 2 -4 5
中缀表达式
定义:就是我们常用的算法方式。
示例:(1-2)*(4-5)=> (1-2)*(4-5)
后缀表达式
又名:逆波兰表达式(RPN)。
定义:就是不用任何括号的后缀表达式。每遇到一个运算符就取该运算符的前面两个数据进行运算。
示例:(1-2)*(4-5)=>1 2-4 5+*
黄金分割
定义:黄金比例又称黄金分割,是指事物各部分间一定的数学比例关系,即整体一分为二,较大的部分与较小的部分之比等于整体与较大部分之比,其比值约为1:0.618或者1.618:1。
回溯
定义:指的是遇到问题或者麻烦时就回到前面再继续往前进。