Skip to content

Commit

Permalink
fix: 文字错误
Browse files Browse the repository at this point in the history
  • Loading branch information
yangjin committed Nov 30, 2019
1 parent 8c83370 commit 825b25a
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions docs/algo/排序/归并排序和快速排序.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@

### 归并排序原理

如果要排序一个数组,先把数组从中间分成前后两部分,然后对前后两部分分别排序,再讲排好序的两部分合并在一起,这样整个数组就有序了。
如果要排序一个数组,先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就有序了。

**归并排序使用的就是分治思想**。分治,就是分而治之。讲一个大问题分解成小的子问题来解决,小的子问题解决了,大问题也就解决了。

通过上面的描述,感觉分治思想和递归思想很相似。是的,分治算法一般都是用递归来实现的。**分支是一种解决问题的处理思想,递归是一种编程技巧**
通过上面的描述,感觉分治思想和递归思想很相似。是的,分治算法一般都是用递归来实现的。**分治是一种解决问题的处理思想,递归是一种编程技巧**

为了写出归并排序的代码,先要找到递推公式和终止条件:

Expand Down Expand Up @@ -50,7 +50,7 @@ function mergeSort(arr) {
rightIndex++;
}
}
// 将剩下元素的放到默认
// 将剩下元素的放到末尾
temp = temp.concat(left.slice(leftIndex), right.slice(rightIndex));
return temp;
}
Expand All @@ -70,13 +70,13 @@ mergeSort(arr);

#### 归并排序是稳定的排序算法吗?

归并排序稳步稳定关键要看 `merge` 函数,在合并过程中,如果 A[p...q] 和 A[q+1...r] 之间有相同的值,那么只要先把 A[p...q]的元素先放入,这样就能保证值相同的元素,在合并前后的先后顺序不变。所以,归并排序是一个稳定的排序算法。
归并排序稳不稳定关键要看 `merge` 函数,在合并过程中,如果 A[p...q] 和 A[q+1...r] 之间有相同的值,那么只要先把 A[p...q]的元素先放入,这样就能保证值相同的元素,在合并前后的先后顺序不变。所以,归并排序是一个稳定的排序算法。

#### 归并排序的时间复杂度是多少?

归并排序是通过递归实现的。递归就是把一个大问题 a 分解成几个小问题 b、c 来求解,求小问题 b、c 解决之后,再把小问题的结果合并成大问题 a 的解。

如果我们定义求解大问题的 a 的时间是 T(a),求解小问题 b、c 的时间分别是 T(b) 和 T(c),那么局可以得到这样的递推公式
如果我们定义求解大问题的 a 的时间是 T(a),求解小问题 b、c 的时间分别是 T(b) 和 T(c),那么就可以得到这样的递推公式

```
T(a) = T(b) + T(c) + K
Expand Down

0 comments on commit 825b25a

Please sign in to comment.