auto commit

This commit is contained in:
CyC2018 2018-03-12 00:23:38 +08:00
parent 6f74f1777b
commit 1174f90368

View File

@ -600,9 +600,9 @@ Java 系统库中的主要排序方法为 java.util.Arrays.sort(),对于原始
### 5.3 基于切分的快速选择算法 ### 5.3 基于切分的快速选择算法
快速排序的 partition() 方法,会将数组的 a[lo] 至 a[hi] 重新排序并返回一个整数 j 使得 a[lo..j-1] 小于等于 a[j],且 a[j+1..hi] 大于等于 a[j]。那么如果 j=ka[j] 就是第 k 个数 快速排序的 partition() 方法,会返回一个整数 j 使得 a[lo..j-1] 小于等于 a[j],且 a[j+1..hi] 大于等于 a[j],此时第 a[j] 就是数组的第 j 大元素
该算法是线性级别的,因为每次正好将数组二分,那么比较的总次数为 (N+N/2+N/4+..),直到找到第 k 个元素,这个和显然小于 2N 可以利用这个特性找出数组的第 k 个元素
```java ```java
public static Comparable select(Comparable[] a, int k) { public static Comparable select(Comparable[] a, int k) {
@ -617,6 +617,8 @@ public static Comparable select(Comparable[] a, int k) {
} }
``` ```
该算法是线性级别的,因为每次正好将数组二分,那么比较的总次数为 (N+N/2+N/4+..),直到找到第 k 个元素,这个和显然小于 2N。
# 查找 # 查找
本章使用三种经典的数据结构来实现高效的符号表:二叉查找树、红黑树和散列表。 本章使用三种经典的数据结构来实现高效的符号表:二叉查找树、红黑树和散列表。