数据结构和算法初级笔记

算法---二分搜索

1.从数组的中间元素开始,如果中间元素正好是x,查找成功.

2.否则我们利用中间位置将数组分为前\后两个子数组

如果x小于中间位置的元素,则进一步查找前一个子数组

否则进一步查找后一个子数组

3.重复以上步骤,直到找到满足条件的元素,或直到子数组不存在为止,代表查找不成功

时间复杂度BigO

算法的渐进时间复杂度

T(n)=O(f(n))

常见时间复杂度

O(1+3N)=O(N)

 

O(n^2)

O(n+n^2)=O(n^2)

O(1)

 

O(n) 

O(logN)

 2^K=n

K=logN

 

 O(nlogN)

 O(n^2)

 O(nm)

空间复杂度

内存空间增长的趋势

常见空间复杂度

O(1)

 

 O(n)

(还有一种时二维数组的循环,复杂度为O(n^2))

时间空间复杂度=时间和空间增长的趋势

排序

插入排序 Insertion Sort

在插入排序中,我们从前到后一次处理未排好序的元素,对于每个元素,我们将它与之前排好序的元素进行比较,找到对应的位置后并插入.

步骤:

1.从第二个元素(第一个要排序的新元素)开始,从后向前扫描之前的元素序列

2.如果当前扫描的元素大于新元素,将扫描元素移动到下一位

3.重复步骤2,直到找到一个小于或者等于新元素的位置

4.将新元素插入到该位置

5.对于之后的元素重复步骤1-4

function insertion_sort(array[]):
    for(i-1;i<array.length;i++):
        cur=array[i]
        j=i-1
        while(j>=0 && array[j]>cur):
        array[j+1]=array[j]
        j--
        array[j+1]=cur

快排 QuickSort

分治特点

步骤:

1.对于当前的数组,取最后一个元素当做基准数

2.将所有比基准数晓得元素排到基准数之前,比基准数大的排在基准数之后

3.当基准数被放到准确的位置之后,根据基准数的位置将元素且分为前后两个子数组

4.对子数组采用步骤1-4的递归操作,直到子数组的长度小于等于1为止

归并排序 MergeSort

在此算法中,我们将一个数组分为两个子数组.通过递归重复将数组切分到只剩下一个元素为止,然后将每个子数组中的元素排序后合并,通过不断合并子数组,最后就会拿到一个排好序的大数组

链表

特点:1.序列性的数据结构  2.数据域+ next指针

 链表的类型:

 堆栈的概念

 堆栈一端固定,一段浮动,所有数据存入或取出,只能在浮动的一端(称栈顶)进行,严格按照"先进后出"的原则存取.(队列是按照"先进先出")

堆,一般由程序员分配释放,存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收).

栈,由操作系统自动分配释放,使用一级缓存,通常都是被调用时处于存储空间,调用完后立即释放

哈希表

 

 

 哈希函数

 树的种类

1.二叉树(Binary Tree):每个节点最多含有两个子节点

2.满二叉树(Full Binary Tree):在满二叉树中,每个不是尾节点的节点都有两个子节点

3.完全二叉树(Complete Binary Tree):假设一个二叉树深度(depth)为d(d>1),除了第d层外,其他各层的节点数量均已达到最大值,且第d层所有节点从左向右紧密排列,这样的二叉树就是完全二叉树

4.排序二叉树(BinarySearchTree):在此树中,每个节点的数值比左子树上的每个节点都大,比所有右子树上的节点都小.

5.平衡二叉树(AVL Tree) :任何节点的两颗子树的高度差不大于1的排序二叉树

6.B树(B-tree):B树和平衡二叉树一样,只不过它是一种多叉树(一个节点的子节点数量可以超过二)

7.红黑树(red-black Tree):是一种自平衡二叉寻找树

遍历树的方法

1.pre-order Traversal 先序:先访问节点自己,然后访问左子树,最后再访问右子树

2.in-order Traversal 中序:先访问左子树上的节点,再访问自己,最后再访问右子树上的节点

3.Post-order Traversal 后序:先访问左右子树,最后在访问自己

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值