auto commit
This commit is contained in:
parent
6f74f1777b
commit
1174f90368
@ -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=k,a[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。
|
||||||
|
|
||||||
# 查找
|
# 查找
|
||||||
|
|
||||||
本章使用三种经典的数据结构来实现高效的符号表:二叉查找树、红黑树和散列表。
|
本章使用三种经典的数据结构来实现高效的符号表:二叉查找树、红黑树和散列表。
|
||||||
|
Loading…
x
Reference in New Issue
Block a user