算法基础总结

算法基础

1、算法有5个基本组成:
输入:算法都要有一个输入
输出:有确定的输出
有穷:有限的解决步骤,可执行完
确切:每个步骤都是无二义的,确定的
可行:在可以接受的范围内有解

2、算法的分析与评价:时间,空间两个方面衡量。
复杂度表示函数:三种,上界、下界,上下界。多用O(x).

3、基本数据结构
线性表:
实现方式,数组、链表
栈和队列:
先进后出FILO、先进先出FIFO
树:
二叉树、二叉搜索树、B树、B+树、红黑树、堆
图:
连通图,有向图,无向图,最小生成树
散列表(Hash表):
散列函数:全域散列法(随机选择预设的散列函数)
开放寻址法(冲突解决):线性探查,二次探查,双重散列,

查找排序

查找:
1、查找分为查找成功和不成功的情况

2、顺序查找、折半查找、Hash查找

排序:
排序需要考虑两个特征:a、稳定性 b、时空复杂度
1、插入排序
a、直接插入排序
初始已排序数组为空,将未排序的数组元素依次取出插入到已排序数组的合适位置。合适位置通过从已排序数组的头部遍历查找,插入意味着后续元素的后移。
b、折半插入排序
和直接插入排序只有一点不同即,寻找位置是通过二分查找的方式。

2、冒泡排序
多次遍历数组,每一次遍历都会将特定(未排序中最大或最小)移到数组未排序部分的尾部(或头部),加入到已排序部分。每次遍历每个元素之间进行比较决定是否交换。
时间:最好O(n) 平均O(n2) 最坏O(n2) 空间:O(1) 稳定:是

3、简单选择排序
类似于冒泡排序,但每次遍历只对每个元素进行比较,并保存特定元素的下标,一次遍历完之后交换。
时间:最好O(n) 平均O(n2) 最坏O(n2) 空间:O(1) 稳定:是

4、希尔排序
是插入排序的一种改进,将元素利用下标的增量进行分组。每次对分组排序后,减小增量,重新排序。
时间:最好- 平均- 最坏- 空间:O(1) 稳定:否

5、快速排序
分两步:
第一步,取轴,将数组比轴小的部分放在一边,大的放到另一边
第二步,分别对轴两边的数据进行第一步的操作
时间:最好O(nlog2n) 平均O(nlog2n ) 最坏O(n2) 空间:O(log2n) 稳定:否

6、堆排序
第一步:构造大根堆或小根堆
第二步:根和最后元素交换,重新调整堆形成大根堆
时间:最好O(nlog2n) 平均O(nlog2n ) 最坏O(nlog2n ) 空间:O(1) 稳定:否

7、归并排序
将序列每相邻两个数字进行归并操作(merge),形成floor(n/2)个序列,排序后每个序列包含两个元素
将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素
重复步骤2,直到所有元素排序完毕
时间:最好O(nlog2n) 平均O(nlog2n ) 最坏O(nlog2n ) 空间:O(n) 稳定:否

8、基数排序从尾数位开始排序,因为是稳定的排序,所以大的值不会到前面去。
时间:最好O(d(n+r)) 平均O(d(n+r)) 最坏O(d(n+r) ) 空间:O(r) 稳定:是

9、桶排序
就想桶一样……
时间:最好O(n) 平均O(n) 最坏O(n) 空间:O(n) 稳定:否

10、计数排序
假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个数。当k=O(n)时,排序的运行时间为O(n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值