数据结构与算法演示台SUANFA.NET.CN · STEP BY STEP

目录 · 17 个演示

全部算法演示

按数据结构分成五类。每一页都能改输入、单步走,并附复杂度、要点和常见错误。

01

排序

六种排序逐次比较、逐次交换,看清谁和谁比、为什么要换。
演示一句话平均最坏空间稳定性
冒泡排序反复比较相邻的两个数,前大后小就交换。O(n²)O(n²)O(1)稳定
插入排序把数组分成左边有序、右边待处理两段。O(n²)O(n²)O(1)稳定
选择排序每一轮在还没排好的部分里找出最小值,和这一段最前面的数交换。O(n²)O(n²)O(1)不稳定
归并排序先把数组一直对半拆,拆到每段只剩一个数;再把相邻的两段有序段合并:每次比较两段的头,把小的那个写回原数组。O(n log n)O(n log n)O(n)稳定
快速排序选一个基准(这里取区间最后一个数),把比它小的都挪到左边,基准放到中间,然后对左右两段分别做同样的事。O(n log n)O(n²)O(log n) 平均,O(n) 最坏不稳定
堆排序把数组看成一棵完全二叉树,先整理成大顶堆(每个结点都不小于孩子),堆顶就是最大值;把它换到末尾,堆缩小一格,再让新的堆顶往下沉,重复到堆里只剩一个数。O(n log n)O(n log n)O(1)不稳定
02顺序查找一个个看,二分查找每次砍掉一半。
演示一句话平均最坏空间稳定性
顺序查找从第一个数开始逐个比较,遇到要找的数就返回它的位置;全部看完都没有就返回 −1。O(n)O(n)O(1)
二分查找在有序数组里找数:每次看区间正中间的那个,比目标小就丢掉左半边,比目标大就丢掉右半边,区间每一步缩小一半。O(log n)O(log n)O(1)
03

栈与队列

后进先出与先进先出,顺带看循环队列怎样绕回开头。
演示一句话平均最坏空间稳定性
只能在一端(栈顶)放入和取出的线性表:最后放进去的最先拿出来。O(1)O(1)O(n)
队列(循环队列)一端进、另一端出的线性表:先放进去的先拿出来。O(1)O(1)O(n)
04

二叉树遍历

前序、中序、后序靠递归,层序靠队列;调用栈同步可见。
演示一句话平均最坏空间稳定性
前序遍历先访问根,再前序遍历左子树,最后前序遍历右子树。O(n)O(n)O(h)
中序遍历先中序遍历左子树,再访问根,最后中序遍历右子树。O(n)O(n)O(h)
后序遍历先后序遍历左子树,再后序遍历右子树,最后访问根。O(n)O(n)O(h)
层序遍历从根开始一层一层往下,每层从左到右访问。O(n)O(n)O(w)
05

广度优先、深度优先,以及带权图上的 Dijkstra 最短路。
演示一句话平均最坏空间稳定性
广度优先搜索(BFS)从起点出发,先访问所有距离为 1 的顶点,再访问距离为 2 的,一圈一圈往外扩。O(V + E)O(V + E)O(V)
深度优先搜索(DFS)从起点出发,沿着一个没访问过的邻居一直往深处走,走到没路了就退回上一个顶点,换下一个邻居继续。O(V + E)O(V + E)O(V)
Dijkstra 最短路求一个起点到其余各顶点的最短距离。O(V²)O(V²)O(V)