数据结构与算法

一. 数据结构
1.研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题。简单来说就是把数据按照一定关系组织起来的集合,用来组织和存储数据。
2.逻辑结构:存储的数据的相互关系分为集合(没有关系)、线性(一对一)、树形(一对多)、图形(多对多)。
3.物理结构:逻辑结构在计算机中的表示方式(映射),也叫存储结构,包括顺序结构(地址连续的地址单元,逻辑关系和物理关系是一致的)、链式结构(内存单元可以连续或者不连续,使用指针来指向,内存地址需要重头开始找)
4.算法:解题方案的准确而完整的描述,是一系列解决问题的清晰指令。在给定规范的输入,能够在有限时间内获得所要求的输出)
5.算法追求:花费最少时间(时间复杂度),占用最少内存(空间复杂度)
6.时间复杂度
(1)事后分析估计方法,(结束时间减开始)不好
(2)事前分析估计:取决于算法采用的策略和方案、编译产生的代码质量、输入规模、机器执行指令的速度
(3)时间复杂度“关心核心操作的次数和输入规模关联起来”,只关心高次项,忽略低次项和系数
(4)时间—次数
(5)最好情况、最坏情况、平均情况
7.空间复杂度
(1)基本数据类型的内存占用情况,float(4字节),引用是8字节,创建对象除了对象内部的开销外,还需要16字节开销用来保存对象头信息在这里插入图片描述
(2)计算机访问内存时以字节为单位,一次一字节
(3)内存的使用是以8字节为单位,不是8字节的倍数会自动填充
(4)java中的数组被限定为对象,16字节的头开销还有4字节用来记录长度以及填充4字节

8.Comparable接口
Integer实现Comparable

用代码实现!!

简单排序
9.冒泡排序
(1)比较相邻元素,把较大的放后面(每执行玩一次,找到当前最大的),拉通比较。
(2)最坏情况下(逆序),比较N-1+…1次,交换N-1+…1次,时间复杂度为O(N^2)
10.选择排序
(1)假定第一个元素是最小的,每次遍历时,找最小值对应的索引,最后再把最小的放前面
(2)最坏情况下(逆序),比较N-1+…1次,交换N-1次,时间复杂度为O(N^2)
11.插入排序
(1)元素分为已排序和未排序,一个一个倒叙将未排序的元素和已排序的相比,若比他小就交换,插入到已排序里面
(2)最坏情况下(逆序),比较N-1+…1次,交换N-1+…1次,时间复杂度为O(N^2)
高级排序
13.希尔排序
(1)选定一个增长量h,按照h作为分组的依据,对数据分组
(2)对分好组的每一组数据完成插入排序
(3)减小h,最小到1,重复(2)
(4)初始h:h<n/2,h=2h+1,然后减半

(5)时间复杂度:用事先估计。网上写的:O(n^(1.3—2))、O(nlogn)~O(n2),平均时间复杂度大致是O(n√n)

14.归并排序
(1)递归:函数内调用函数
(2)将数据拆成相等的两部分,直到剩一个,再将相邻两个子组合并成一个有序的大组(此时排序)(递归)
(3)时间复杂度,对输入n,有logn层,第i层有2^(i)个组,则第log,时间复杂度为O(nlogn)
(4)需要申请额外内存,以空间换时间
15.快速排序
(1)选定一个分界值,将数组分成左右两部分
16.排序的稳定性
(1)相同元素在排序前后相对位置相同是一样的就是稳定

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值