【知识点总结】内功修炼-算法篇

五大基本特征

  1. 输入:最少有0个或者多个输入。
  2. 输出:至少有一个输出。
  3. 有穷性:算法的每步必须是有限的,不能出现无限的循环,并且每个步骤的执行时间也是在可以接受的范围内。
  4. 确定性:算法的每步必须都有确定的意义(无歧义),在一定条件下只能有一条执行路径。
  5. 可行性:算法的每步必须都是可行的,每步都可以通过有限的执行次数完成。

设计要求

  1. 正确性:算法至少具备输入,输出和加工处理的无歧义性,能够正确的反应问题的需求并得到正确的答案。
  2. 可读性:
  3. 健壮性:当输入的数据不合理时,也能做出相应的处理,而不产生异常、崩溃等莫名奇妙的结果。
  4. 时间效率高,存储低。

排序算法

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(nk) O ( n ∗ k ) O(n*k) O(nk) O ( n ∗ k ) O(n*k) O(nk) 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。

回溯

定义:指的是遇到问题或者麻烦时就回到前面再继续往前进。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠檬一定很酸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值