DSA Notes - xapool/xapool.github.io GitHub Wiki

代码执行顺序和递归

  • 代码一般是按照书写的顺序执行的,当一条语句或一个方法执行完成是,执行下一个方法语句
  • 可以把复杂的代码,如 for 循环 while 循环,递归调用等,当做一个语句去看
  • 位于递归调用语句前的语句,由外往里执行,位于递归调用语句后面的语句,由里往外执行
  • 递归函数一定要有一个出口,否则就是死递归
  • 理解为,因为一个语句执行完成后才执行下一条语句,所以递归调用这条语句不停的调用执行自己,直到满足判定条件的出口,结束这条递归调用时,才会执行递归调用语句后面的语句,但是后面的语句是从递归最里面的一层往外执行的,类似一个栈,先进后出
  • 不去纠缠于它的具体执行过程,而是看它能完成的任务

位移运算

  • 向左位移 n,相当于乘以2的n次方
  • 向右位移 n,相当于除以2的n次方,低位移除(舍弃),高位的空位补符位号,即正数补0,负数补1

算法和程序

  • 算法,所谓算法,就是一个清晰的逻辑推导计算过程。在计算机程序中,就是对该过程进行抽象化,然后使用循环语句,分支语句等代码来完成
  • 程序,就是算法在数据结构上的使用。一般是把问题进行抽象化成一个数据结构,如数组、链表、栈、队列等,然后才能对数据进行存储或计算
  • 基本数据结构有数组和链表,数组在内存中存储位置时连续的,因此可以使用下标来访问元素;链表是非连续的存储空间
  • 此外常用的数据结构还有栈和队列

排序

  • 在大量数据的情况下,快速排序、归并排序速度明显优于堆排序
  • 而 O(n^2) 的算法中,插入排序速度明显优于冒泡和选择排序,冒泡最差
  • 因此,在 java.util.Arrays 所用的 sort 方法的实现中,使用了优化后的(基准数的优化)的快速排序算法,并且当待排数组长度小于 47 时,会使用插入排序
  • 在 Collections sort 实现中使用的是归并排序,归并排序是不稳定的排序
⚠️ **GitHub.com Fallback** ⚠️