算法-希尔排序(Shell Sort)

定义

希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破$O(n^2)$的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。

希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

阅读更多

算法-插入排序(Insertion Sort)

定义

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

阅读更多

算法-选择排序(Selection Sort)

定义

表现最稳定的排序算法之一,因为无论什么数据进去都是$O(n2)$的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

阅读更多

算法-冒泡排序(Bubble Sort)

定义

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

阅读更多

算法概述

算法包括:

  1. 排序算法:

    冒泡排序选择排序插入排序希尔排序归并排序快速排序堆排序计数排序桶排序基数排序

  2. 搜索算法:回溯、递归、剪枝

  3. 图论:最短路径、最小生成树、网络流建模

  4. 动态规划:背包问题、最长子序列、计数问题

  5. 基础技巧:分治、倍增、二分法、贪心算法

  6. 宽度优先搜索

  7. 深度优先搜索

  8. 广度优先

  9. 双指针

  10. 扫描线

  11. 朴素贝叶斯

  12. 推荐算法

数据结构-图说B+树

了解了 B 树后再来了解下它的变形版:B+ 树,它比 B 树的查询性能更高。

一棵 B+ 树需要满足以下条件:

  1. 节点的子树数和关键字数相同(B 树是关键字数比子树数少一)
  2. 节点的关键字表示的是子树中的最大数,在子树中同样含有这个数据
  3. 叶子节点包含了全部数据,同时符合左小右大的顺序
阅读更多

数据结构-图说B树

本文提到的「B-树」,就是「B树」,都是 B-tree 的翻译,里面不是减号-,是连接符-。因为有人把 B-tree 翻成 「B-树」,让人以为「B树」和「B-树」是两种树,实际上两者就是同一种树。

阅读更多

数据结构

定义:

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合

  • 集合

数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;

  • 线性结构

数据结构中的元素存在一对一的相互关系

  • 树形结构

数据结构中的元素存在一对多的相互关系;

  • 图形结构

数据结构中的元素存在多对多的相互关系。

常见的数据结构:数组、队列、栈、链表、树、图、堆、散列表

阅读更多

SpringBoot中的war包部署

由于SpringBoot默认是打成 jar包的,一旦使用war包部署注意:

  • application.properties 中配置server.servlet.context-path、server.port 失效
  • 访问时使用打成war包的名字和外部自己tomcat端口号进行访问项目
阅读更多

SpringBoot中的拦截器

定义

拦截器(Interceptor ) 拦截、中断的意思,类似于 JavaWeb中的Filter,但不如Filter拦截的范围大。

作用

通过将控制器中的通用代码放在拦截器中执行,减少控制器中的代码冗余。

阅读更多