算法

  • 数据结构
    • 栈,队列,链表,二叉树
    • 重点:链表+二叉树
      • 深度遍历
      • 广度遍历
    • 计算机的内存相关
  • 算法
    • 二分查找,选择排序,冒泡排序,插入排序,希尔排序,快速排序
 
  • 使用两个队列实现一个栈image.png
 
  • 链表
    • 节点的封装
      • item:保存数据值
      • next:保存下一个节点的地址
    • 链表封装
      • head = 链表表中第一个节点的地址
    • 指向:如果一个引用保存了某一块内存空间的地址,则表示该引用指向这块内存空间。next = Node()
    • 链表节点指向翻转或者链表倒置:image.png
 
  • 二叉树image.png
 
  • 广度遍历:逐层从上到下遍历
  • 深度遍历:子树
    • 前序:跟左右
    • 中序:左跟右
    • 后序:左右跟image.png
 
  • 排序二叉树:插入节点的时候,比根节点小的节点插入到左侧,大的插入到右侧。
  • 好处:中序遍历作用到排序二叉树中,遍历的结果就是一个有序集合image.png
 
  • 二分查找:只可以作用在有序集合中image.png
 
  • 冒泡image.png
    • 1.可以将序列中的元素两两比较,将每两个元素中较大的值逐一向尾部偏移,最终偏移到序列的末尾。
    • 2.将步骤一的操作重复执行n-1次,可以将n-1个最大值找出放置到子序列的末尾。序列就变成有序集合了。
 
  • 选择
    • 1.元素两两比较,最终找到最大值,直接将最大值和序列最后一个元素交换位置。最大元素放置在序列末尾位置。
    • 2.将步骤一的操作重复执行n-1次,可以将n-1个最大值找出放置到子序列的末尾。序列就变成有序集合了image.png
 
  • 插入排序
    • 假设将一个序列拆分成两部分:
      • 有序部分:默认情况下,序列的第一个元素作为有序部分的第一个元素
      • 无序部分:除了第一个元素剩下的元素默认作为无序部分的元素image.png
 
  • 需要将无序部分的每一个值,以此插入到有序部分合适的位置即可。
 
  • 希尔排序
    • 插入排序就是增量gap为1的希尔排序
    • 引入了概念叫做增量gap
      • 1.gap表示对原始序列分组的组数
      • 2.gap表示每一组中数值于数值之间的间隔
 
  • 快排
    • 基数:默认情况下,乱序序列的第一个数值作为基数。
    • 将序列的每一个数值和基数比较,比基数大的数值统一放置在基数右侧,比基数小的数值统一放在基数左侧。
      • 在原始序列中需要使用两个变量(low,high)分别指向序列的起始位置。首先先偏移h在偏移l。
    • 可以使用递归将上述操作进行重复执行,知道low>high结束递归
posted @ 2020-09-16 11:29  weton  阅读(111)  评论(0)    收藏  举报