视觉直观感受7种常用的排序算法
摘要:1 快速排序介绍:快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。步骤:▲从数列中挑出一个元素,称为 “基准”(Pivot),▲重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处
阅读全文
Trie树
摘要:本文讨论一棵最简单的trie树,基于英文26个字母组成的字符串,讨论插入字符串、判断前缀是否存在、查找字符串等基本操作;至于trie树的删除单个节点实在是少见,故在此不做详解。l Trie原理Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。l Trie性质好多人说trie的根节点不包含任何字符信息,我所习惯的trie根节点却是包含信息的,而且认为这样也方便,下面说一下它的性质 (基于本文所讨论的简单trie树)1. 字符的种数决定每个节点的出度,即branch数组(空间换时间思想)2. branch数组的下标代表字符相对于a的相对位置3. 采用标.
阅读全文
最大堆/最小堆【大根堆/小根堆】
摘要:堆的定义是:n个元素的序列{k1,k2,…,kn},当且仅当满足如下关系时被成为堆 (1)Ki <= k2i 且 ki <= k2i-1 或 (2) Ki >= k2i 且 ki >= k2i-1 (i = 1,2,…[n/2])当满足(1)时,为最小堆,当满足(2)时,为最大堆。 若将此序列对应的一维数组堪称是一个完全二叉树,则2i和2i+1个节点分别是节点i的左右子节点。如下为一个最大堆:下面以最小堆为例说明堆的输出: 图1为一个最小堆,当最小节点根节点13输出后,将最后一个节点97作为根节点,移到顶端,如图2. 然后要对堆进行调整。比较此完全树的根节点与其...
阅读全文
单链表java简单实现
摘要:public class SingleLinearList {class Node { Node next; int value; }Node first = null;Node now;Node newNode;Node temp; static int count=0;public void add(int value) { newNode = new Node();if (first == null) { first = newNode; } else{ now = first; while (now.next != null) {now = now.next; } now.next=n
阅读全文