auto commit
This commit is contained in:
11
notes/算法.md
11
notes/算法.md
@ -15,7 +15,9 @@
|
||||
* [路径压缩的加权 quick-union](#路径压缩的加权-quick-union)
|
||||
* [各种 union-find 算法的比较](#各种-union-find-算法的比较)
|
||||
* [四、排序](#四排序)
|
||||
* [初级排序算法](#初级排序算法)
|
||||
* [选择排序](#选择排序)
|
||||
* [插入排序](#插入排序)
|
||||
* [希尔排序](#希尔排序)
|
||||
* [归并排序](#归并排序)
|
||||
* [快速排序](#快速排序)
|
||||
* [优先队列](#优先队列)
|
||||
@ -480,9 +482,8 @@ private void exch(Comparable[] a, int i, int j){
|
||||
}
|
||||
```
|
||||
|
||||
## 初级排序算法
|
||||
|
||||
### 1. 选择排序
|
||||
## 选择排序
|
||||
|
||||
找到数组中的最小元素,将它与数组的第一个元素交换位置。再从剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。不断进行这样的操作,直到将整个数组排序。
|
||||
|
||||
@ -505,7 +506,7 @@ public class Selection {
|
||||
|
||||
选择排序需要 \~N<sup>2</sup>/2 次比较和 \~N 次交换,它的运行时间与输入无关,这个特点使得它对一个已经排序的数组也需要这么多的比较和交换操作。
|
||||
|
||||
### 2. 插入排序
|
||||
## 插入排序
|
||||
|
||||
入排序从左到右进行,每次都将当前元素插入到左部已经排序的数组中,使得插入之后左部数组依然有序。
|
||||
|
||||
@ -532,7 +533,7 @@ public class Insertion {
|
||||
|
||||
对于随机排序的无重复主键的数组,插入排序和选择排序的运行时间是平方级别的,两者之比是一个较小的常数。
|
||||
|
||||
### 3. 希尔排序
|
||||
## 希尔排序
|
||||
|
||||
对于大规模的数组,插入排序很慢,因为它只能交换相邻的元素,如果要把元素从一端移到另一端,就需要很多次操作。
|
||||
|
||||
|
Reference in New Issue
Block a user