auto commit

This commit is contained in:
CyC2018 2018-02-28 12:02:47 +08:00
parent 9057fb07f3
commit 1936cff95d

View File

@ -630,18 +630,18 @@ public class MergeSort {
### 2. 自顶向下归并排序
```java
public static void sort(Comparable[] a) {
public static void sort(Comparable[] a) {
aux = new Comparable[a.length];
sort(a, 0, a.length - 1);
}
}
private static void sort(Comparable[] a, int lo, int hi) {
private static void sort(Comparable[] a, int lo, int hi) {
if (hi <= lo) return;
int mid = lo + (hi - lo) / 2;
sort(a, lo, mid);
sort(a, mid + 1, hi);
merge(a, lo, mid, hi);
}
}
```
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/6468a541-3a9a-4008-82b6-03a0fe941d2a.png)
@ -659,7 +659,7 @@ public class MergeSort {
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/c7b9b4c8-83d1-4eb0-8408-ea6576a9ed90.png)
```java
public static void busort(Comparable[] a) {
public static void busort(Comparable[] a) {
int N = a.length;
aux = new Comparable[N];
for (int sz = 1; sz < N; sz += sz) {
@ -667,7 +667,7 @@ public class MergeSort {
merge(a, lo, lo + sz - 1, Math.min(lo + sz + sz - 1, N - 1));
}
}
}
}
```
## 快速排序
@ -701,7 +701,7 @@ public class QuickSort {
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/e198c201-f386-4491-8ad6-f7e433bf992d.png)
```java
private static int partition(Comparable[] a, int lo, int hi) {
private static int partition(Comparable[] a, int lo, int hi) {
int i = lo, j = hi + 1;
Comparable v = a[lo];
while (true) {
@ -712,7 +712,7 @@ public class QuickSort {
}
exch(a, lo, j);
return j;
}
}
```
### 3. 性能分析
@ -904,7 +904,7 @@ Java ϵͳ
该算法是线性级别的,因为每次正好将数组二分,那么比较的总次数为 (N+N/2+N/4+..),直到找到第 k 个元素,这个和显然小于 2N。
```java
public static Comparable select(Comparable[] a, int k) {
public static Comparable select(Comparable[] a, int k) {
int lo = 0, hi = a.length - 1;
while (hi > lo) {
int j = partion(a, lo, hi);
@ -913,7 +913,7 @@ Java ϵͳ
else lo = j + 1;
}
return a[k];
}
}
```
# 第三章 查找