算法整理_20210418

算法的特性

有穷性
确定性
输入(》=0)
输出(》=1)
有效性

算法复杂度

时间复杂度

空间复杂度

查找

顺序查找

从头到尾比较
O(n)

二分查找(要查找的关键字要有序排列)

关键字有序排列R【low。。。high】
key ?= R【mid】
O(log2n)

散列表查找(根据关键值和散列函数算出存放地址值)

设计Hash函数,按内容选择存储地址。
建立关键值与存储空间的关系
有冲突的时候调整,选取Hash函数时要尽量降低冲突

排序

排序概念

稳定排序
不稳定排序
内部排序
外部排序

排序方法分类

稳定/不稳定排序 内/外排序

插入类排序:直接插入排序、希尔排序
选择类排序:直接选择排序、堆排序
交换类排序:冒泡排序、快速排序
归并排序
基数排序

1、直接插入排序(稳定)

插入第i个记录是,R1~Ri-1已经排好序,因此将Ri依次与他们进行比较,插入即可。O(n2)

2、希尔排序(不稳定)

插入排序的一种。
分组插入方法。
等差数列分组。二分法分组。
减少最后一次直接插入操作次数。
问题空间较大时,希尔排序效率更高。统计学分析有结论。

3、直接选择排序(不稳定)

选最小
再在剩余内容中选最小

4、堆排序(不稳定)

堆排序概念

k1~kn
ki《=k2i且ki《=k2i+1 小顶堆
符号反过来 大顶堆
与完全二叉树相似

堆排序原理

先建立堆
输出堆顶元素
再将剩下的序列建立堆
再输出堆顶元素
。。。
得到有序数列

基本思想 建堆选择比直接选择更高效
1、初建堆

按完全二叉树方式建堆

2、调整

1、左首点开始,最后一个非叶子节点
2、将最大元素调整为根节点。
3、往前每个节点进行调整。
4、调整过的节点要对子树进一步调整。

3、调走根节点
4、完全二叉树的最后一个节点放在根节点
5、重复前面“调整”步骤
6、。。。重复
7、完成排序

对排序前部分元素更好用。

5、冒泡排序(稳定)

相邻两个元素,比较,如大于则交换。
继续比较。
比完且交换完一圈后,最后一个元素为最大元素。
继续此流程,直至排序完成。

6、快速排序(不稳定)

分治法:把一个问题分解成若干更小的问题。
递归法
定一个基准
末端与基准做对比,如小于基准,则交换。
从另一末端再比较,如大于基准,则交换。
直至基准到最中间。分割成两个小数列。
两个小数列用同样方法继续排序。

7、归并排序(稳定)

将两个或两个以上有序子表合并成一个新的有序表。
对有序表的归并比无序表排序计算次数少。

8、基数排序(稳定)

借助多关键字对单逻辑关键字进行排序。
收集个位
收集十位
收集百位

总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值