数据结构与算法
排序
插入类排序::直接插入排序、折半插入排序和希尔排序。
冒泡排序算法,快速排序,选择排序。
冒泡排序算法
冒泡排序算法的运作如下:
比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
核心算法:
for(int j =0;
j < n -1;
j++) {
for(int i =0;
i < n -1- j;
i++){
选择排序算法:
原理:首先在未排序的序列里找到最小元素,放到序列的首端(本位和首位互换)再从剩余元素中找到最小的元素,放到序列的首端。依次循环,直到排序完成。
核心算法:
for(int i =0;
i < n -1;
i++) {
int k = i;
for(int j = i +1;
j < n;
j++){
if(arr[j] < arr[k]){
快速排序算法:
二分查找算法:
算法要求
1.必须采用顺序存储。
2.必须按关键字大小有序排列。
for(int i=0;
i
{
int low=0;
int high=array[i].length-1;
while(low<=high){
int mid=(low+high)/2;
if(target>array[i][mid])
low=mid+1;
else if(target
high=mid-1;
else
return true;
}
}
return false;
列队
Queue
remove/poll, add/offer, element/peek
1. ArrayBlockQueue:一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。创建其对象必须明确大小,像数组一样。
2. LinkedBlockQueue:一个可改变大小的阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。创建其对象如果没有明确大小,默认值是Integer.MAX_VALUE。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。
3. PriorityBlockingQueue:类似于LinkedBlockingQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数所带的Comparator决定的顺序。优先级队列的每个元素都需要实现Comparator接口,也就是可以排序的。
public PriorityQueue(Comparator comparator) {
this(DEFAULT_INITIAL_CAPACITY, comparator);
}
4. SynchronousQueue:同步队列。同步队列没有任何容量,每个插入必须等待另一个线程移除,反之亦然。
树
Tree
二叉树,完全二叉树,满二叉树, Huffman 树
树遍历
前中后序遍历
前序遍历原理
1,先入栈根节点,输出根节点val值,再先后入栈其右节点、左结点;
2,出栈左节点,输出其val值,再入栈该左节点的右节点、左节点;直到遍历完该左节点所在子树。
3,再出栈右节点,输出其val值,再入栈该右节点的右节点、左节点;直到遍历完该右节点所在子树。
4.输出的值可以先存入列队或者集合中。
树存储
双亲表示法
文章图片
树的双亲表示法 左右孩子链表法
一个data域两个指针一个左一个右
树遍历
前序,中序,后续(相对与中间节点而言)DLR LDR LRD
Huffman 树又称优树,可以用来构造优编码,用于信息传输、数据压缩等方面,是 一类有着广泛应用的二叉树。
文章图片
构造过程 以下是树的基本结构代码----------------------->Huffman 树
以HuffmanTreeLinked为例:
HuffmanTreeLinked extends BinaryTreeLinked implements BinTree
【数据结构与算法】HuffmanTreeNode extends BinTreeNodeimplements Node
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 画解算法(1.|画解算法:1. 两数之和)
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM