选择排序

摘要: 工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外 阅读全文
posted @ 2021-04-08 07:05 成长的皮球 阅读(42) 评论(0) 推荐(0) 编辑

插入排序

摘要: 插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个之外的所有元素,内层循环对当前元素前面有序表进行待 阅读全文
posted @ 2021-04-07 07:53 成长的皮球 阅读(37) 评论(0) 推荐(0) 编辑

数据机构与算法学习(八)- 递归

摘要: 递归需要满足三个条件 1. 一个问题的解可以分解为几个子问题的解 2. 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一致。 3. 存在递归终止条件 如何编写递归代码 最关键的是写出递推公式,找到终止条件,剩下将递推公式转化为代码 假如有n个台阶,每次可以跨1个台阶或者2个台阶,请问走这 阅读全文
posted @ 2021-04-06 08:02 成长的皮球 阅读(85) 评论(0) 推荐(0) 编辑

数据机构与算法学习(七)- 队列

摘要: 一、如何理解队列 可以想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进先出,这就是典型的队列。 栈只支持两个基本操作:入栈和出栈。队列和栈非常相似,支持的操作也很有限,基本的操作也是两个:入队,放一个数据到队列尾部;出队,从队列头取一个元素。所以队列和栈一样,也是一种操作受限的线性表 阅读全文
posted @ 2021-03-15 18:36 成长的皮球 阅读(20) 评论(0) 推荐(0) 编辑

数据机构与算法学习(六)- 栈

摘要: 一、如何理解栈 举例说明一下,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个地依次取,不能从中间任意抽出。后进者先出,先进者后出,这就是典型的“栈”结构。 栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。当某个数据集合只涉及在一端插 阅读全文
posted @ 2021-03-15 17:55 成长的皮球 阅读(8) 评论(0) 推荐(0) 编辑

数据机构与算法学习(五)- 数组VS链表

摘要: 时间复杂度 数组 链表 插入、删除 O(n) O(1) 随机访问 O(1) O(n) 数组在实现上使用的是连续的内存空间,可以借助CPU的缓存机制,预读数组中的数据,所以访问效率更高。而连败哦在内存中不连续,所以对CPU缓存不友好,没办法预读。 数组的缺点是大小固定,一经声明就会占用整块连续内存空间 阅读全文
posted @ 2021-03-15 14:36 成长的皮球 阅读(13) 评论(0) 推荐(0) 编辑

数据机构与算法学习(四)- 链表

摘要: 数组和链表是两个非常基础、非常常用的数据结构。 两者的区别:从底层的存储结构来看,数组需要一块连续的内存空间来存储,对内存的要求比较高。而链表恰恰相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用。 三种常见的链表结构:单链表、双链表和循环链表。 单链表 概念定义: 我 阅读全文
posted @ 2021-03-15 14:17 成长的皮球 阅读(29) 评论(0) 推荐(0) 编辑

DFS深度优先

摘要: visited = set() def dfs(node, visited): visited.add(node) #process current node here ... for next_node in node.children(): if not next_node in visited 阅读全文
posted @ 2021-03-03 21:38 成长的皮球 阅读(32) 评论(0) 推荐(0) 编辑

BFS广度优先

摘要: def BFS(graph, start,end): queue = [] queue.append(start) visited.add(start) while queue: node = queue.pop() visited.add(node) process(node) nodes = g 阅读全文
posted @ 2021-03-03 21:25 成长的皮球 阅读(22) 评论(0) 推荐(0) 编辑

分治模板

摘要: def divide_conquer(problem, param1, param2, ...) #recursion terminator if problem is None: print_result return #prepare data data = prepare_data(probl 阅读全文
posted @ 2021-03-02 22:23 成长的皮球 阅读(41) 评论(0) 推荐(0) 编辑