暂时引用Github项目:https://hub.fastgit.xyz/dunwu/algorithm-tutorial

在线阅读:

http://turnon.gitee.io/algorithm-tutorial/#/

https://dunwu.github.io/algorithm-tutorial/#/

数据结构:

1.数据与数据之间的关系:集合,一对一,一对多,多对多

2.数据的存储结构:

线性表(一对一)-->顺序表(数组),链表,栈(先进后出),队列(先进先出)

树形结构(一对多) -->二叉树

图形结构(多对多)

算法性能分析

  • 时间复杂度

评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行时间,也就是“常数项时间”。

  • 空间复杂度

复杂度级别:

  • $$O(1)$$:常数
  • $$O(log n)$$:对数
  • $$O(n)$$:线性
  • $$O(n^2)$$:平方
  • $$O(n^3)$$:立方
  • $$O(2^n)$$:指数
  • $$O(n!)$$:阶乘
// 从小到大排序    arr[]数组
3 2 5 4 3 6
0 1 2 3 4 5
1.选择排序算法
写一个两层循环,i从0开始,比较arr[0]和后面的数,如果arr[0]比arr[1]小,则不变;如果arr[0]比arr[1]大,则交换arr[0]和arr[1],且设置最小值为这个arr[1],同理,这样循环比较完arr[0]的值就是我们设置的最小值,同样的,再去比较arr[1]和后面的数,最后得到arr[1]赋值为最小值
2.冒泡排序算法
比较arr[0]和arr[1],如果arr[0]大于arr[1],则交换arr[0]和arr[1]顺序,同理再去比较arr[1]和arr[2],如果arr[1]大于arr[2],则交换arr[1]和arr[2]顺序...这样从0~N-1,再从0~N-2...

异或运算xor,相同为0,不同为1(以后我讲异或免杀)

  1. 1 ^ N = N,N ^ N = 0
  2. 交换律和结合律

当我们要交换a和b的值时,可以用这样的方法

a = a ^ b;    # a = 甲 ^ 乙    b = 乙
b = a ^ b;    # a = 甲 ^ 乙    b = 甲 ^ 乙 ^ 乙 => b = 甲
a = a ^ b;    # a = 甲 ^ 乙 ^ 甲    => a = 乙      b = 甲
#    切记,这里a不能等于b位置,否则会被抹成0

results matching ""

    No results matching ""