auto commit

This commit is contained in:
CyC2018 2018-06-07 10:48:26 +08:00
parent dff3e7ddc5
commit c9043ae540

View File

@ -25,8 +25,7 @@
* [桶排序](#桶排序)
* [基数排序](#基数排序)
* [外部排序](#外部排序)
* [排序算法的比较](#排序算法的比较)
* [Java 的排序算法实现](#java-的排序算法实现)
* [小结](#小结)
* [六、查找](#六查找)
* [链表实现无序符号表](#链表实现无序符号表)
* [二分查找实现有序符号表](#二分查找实现有序符号表)
@ -34,7 +33,7 @@
* [2-3 查找树](#2-3-查找树)
* [红黑树](#红黑树)
* [散列表](#散列表)
* [应用](#应用)
* [小结](#小结)
* [参考资料](#参考资料)
<!-- GFM-TOC -->
@ -1108,7 +1107,9 @@ public class HeapSort {
## 外部排序
## 排序算法的比较
## 小结
### 1. 排序算法的比较
| 算法 | 稳定 | 原地排序 | 时间复杂度 | 空间复杂度 | 备注 |
| :---: | :---: | :---: | :---: | :---: | :---: |
@ -1122,7 +1123,7 @@ public class HeapSort {
快速排序是最快的通用排序算法,它的内循环的指令很少,而且它还能利用缓存,因为它总是顺序地访问数据。它的运行时间近似为 \~cNlogN这里的 c 比其他线性对数级别的排序算法都要小。使用三向切分快速排序,实际应用中可能出现的某些分布的输入能够达到线性级别,而其它排序算法仍然需要线性对数时间。
## Java 的排序算法实现
### 2. Java 的排序算法实现
Java 主要排序方法为 java.util.Arrays.sort(),对于原始数据类型使用三向切分的快速排序,对于引用类型使用归并排序。
@ -1974,17 +1975,18 @@ private void resize(int cap) {
}
```
## 应用
## 小结
### 1. 各种符号表实现的比较
### 1. 符号表算法比较
| 算法 | 插入 | 查找 | 是否有序 |
| :---: | :---: | :---: | :---: |
| 二分查找实现的有序表 | N | logN | yes |
| 二叉查找树 | logN | logN | yes |
| 2-3 查找树 | logN | logN | yes |
| 链表实现的有序表 | N | N | no |
| 拉链法实现的散列表 | N/M | N/M | no |
| 线性探测法试下的散列表 | 1 | 1 | no |
| 线性探测法实现的散列表 | 1 | 1 | no |
应当优先考虑散列表,当需要有序性操作时使用红黑树。
@ -1993,11 +1995,7 @@ private void resize(int cap) {
- java.util.TreeMap红黑树
- java.util.HashMap拉链法的散列表
### 3. 集合类型
除了符号表,集合类型也经常使用,它只有键没有值,可以用集合类型来存储一系列的键然后判断一个键是否在集合中。
### 4. 稀疏向量乘法
### 3. 稀疏向量乘法
当向量为稀疏向量时,可以使用符号表来存储向量中的非 0 索引和值,使得乘法运算只需要对那些非 0 元素进行即可。