File tree Expand file tree Collapse file tree 7 files changed +115
-0
lines changed Expand file tree Collapse file tree 7 files changed +115
-0
lines changed Original file line number Diff line number Diff line change 45
45
46
46
## 排序
47
47
48
+ - [ 复杂度] ( /算法分类/排序/复杂度.md )
49
+ - [ 排序-概览] ( /算法分类/排序/排序.md )
48
50
- [ 冒泡排序] ( /算法分类/排序/冒泡排序.md ) ⭐⭐
49
51
- [ 插入排序] ( /算法分类/排序/插入排序.md ) ⭐⭐
50
52
- [ 选择排序] ( /算法分类/排序/选择排序.md ) ⭐⭐
Original file line number Diff line number Diff line change @@ -72,6 +72,8 @@ module.exports = {
72
72
{
73
73
title : '排序' ,
74
74
children : [
75
+ '/algorithm/排序/复杂度' ,
76
+ '/algorithm/排序/排序' ,
75
77
'/algorithm/排序/插入排序' ,
76
78
'/algorithm/排序/堆排序' ,
77
79
'/algorithm/排序/归并排序' ,
Original file line number Diff line number Diff line change 6
6
7
7
## 排序
8
8
9
+ - [ 复杂度] ( ./排序/复杂度.md )
10
+ - [ 排序-概览] ( ./排序/排序.md )
9
11
- [ 冒泡排序] ( ./排序/冒泡排序.md ) ⭐⭐
10
12
- [ 插入排序] ( ./排序/插入排序.md ) ⭐⭐
11
13
- [ 选择排序] ( ./排序/选择排序.md ) ⭐⭐
Original file line number Diff line number Diff line change
1
+ ---
2
+ {
3
+ " title " : " 复杂度" ,
4
+ }
5
+ ---
6
+
7
+ ### 时间复杂度
8
+
9
+ 一个算法的时间复杂度反映了程序运行从开始到结束所需要的时间。把算法中基本操作重复执行的次数(频度)作为算法的时间复杂度。
10
+
11
+ 没有循环语句,记作` O(1) ` ,也称为常数阶。只有一重循环,则算法的基本操作的执行频度与问题规模n呈线性增大关系,记作` O(n) ` ,也叫线性阶。
12
+
13
+ 常见的时间复杂度有:
14
+
15
+ - ` O(1) ` : Constant Complexity: Constant 常数复杂度
16
+ - ` O(log n) ` : Logarithmic Complexity: 对数复杂度
17
+ - ` O(n) ` : Linear Complexity: 线性时间复杂度
18
+ - ` O(n^2) ` : N square Complexity 平⽅方
19
+ - ` O(n^3) ` : N square Complexity ⽴立⽅方
20
+ - ` O(2^n) ` : Exponential Growth 指数
21
+ - ` O(n!) ` : Factorial 阶乘
22
+
23
+ ![ ] ( https://i.loli.net/2019/08/19/RS4xlctUEQjbkw6.png )
24
+
25
+ ### 空间复杂度
26
+
27
+ 一个程序的空间复杂度是指运行完一个程序所需内存的大小。利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。
28
+
29
+ 一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。
Original file line number Diff line number Diff line change
1
+ ---
2
+ {
3
+ " title " : " 排序-概览" ,
4
+ }
5
+ ---
6
+
7
+ 排序或许是前端接触最多的算法了,很多人的算法之路是从一个冒泡排序开始的,排序的方法有非常多中,它们各自有各自的应用场景和优缺点,这里我推荐如下6种应用最多的排序方法,如果你有兴趣也可以研究下其他几种。
8
+
9
+ - [ 快速排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F.html )
10
+
11
+ > 选择一个目标值,比目标值小的放左边,比目标值大的放右边,目标值的位置已排好,将左右两侧再进行快排。
12
+
13
+ - [ 归并排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F.html )
14
+
15
+ > 将大序列二分成小序列,将小序列排序后再将排序后的小序列归并成大序列。
16
+
17
+ - [ 选择排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F.html )
18
+
19
+ > 每次排序取一个最大或最小的数字放到前面的有序序列中。
20
+
21
+ - [ 插入排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F.html )
22
+
23
+ > 将左侧序列看成一个有序序列,每次将一个数字插入该有序序列。插入时,从有序序列最右侧开始比较,若比较的数较大,后移一位。
24
+
25
+ - [ 冒泡排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F.html )
26
+
27
+ > 循环数组,比较当前元素和下一个元素,如果当前元素比下一个元素大,向上冒泡。下一次循环继续上面的操作,不循环已经排序好的数。
28
+
29
+ - [ 堆排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E5%A0%86%E6%8E%92%E5%BA%8F.html )
30
+
31
+ > 创建一个大顶堆,大顶堆的堆顶一定是最大的元素。交换第一个元素和最后一个元素,让剩余的元素继续调整为大顶堆。从后往前以此和第一个元素交换并重新构建,排序完成。
Original file line number Diff line number Diff line change
1
+
2
+ ### 时间复杂度
3
+
4
+ 一个算法的时间复杂度反映了程序运行从开始到结束所需要的时间。把算法中基本操作重复执行的次数(频度)作为算法的时间复杂度。
5
+
6
+ 没有循环语句,记作` O(1) ` ,也称为常数阶。只有一重循环,则算法的基本操作的执行频度与问题规模n呈线性增大关系,记作` O(n) ` ,也叫线性阶。
7
+
8
+ 常见的时间复杂度有:
9
+
10
+ - ` O(1) ` : Constant Complexity: Constant 常数复杂度
11
+ - ` O(log n) ` : Logarithmic Complexity: 对数复杂度
12
+ - ` O(n) ` : Linear Complexity: 线性时间复杂度
13
+ - ` O(n^2) ` : N square Complexity 平⽅方
14
+ - ` O(n^3) ` : N square Complexity ⽴立⽅方
15
+ - ` O(2^n) ` : Exponential Growth 指数
16
+ - ` O(n!) ` : Factorial 阶乘
17
+
18
+ ![ ] ( https://i.loli.net/2019/08/19/RS4xlctUEQjbkw6.png )
19
+
20
+ ### 空间复杂度
21
+
22
+ 一个程序的空间复杂度是指运行完一个程序所需内存的大小。利用程序的空间复杂度,可以对程序的运行所需要的内存多少有个预先估计。
23
+
24
+ 一个程序执行时除了需要存储空间和存储本身所使用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为现实计算所需信息的辅助空间。
Original file line number Diff line number Diff line change
1
+ 排序或许是前端接触最多的算法了,很多人的算法之路是从一个冒泡排序开始的,排序的方法有非常多中,它们各自有各自的应用场景和优缺点,这里我推荐如下6种应用最多的排序方法,如果你有兴趣也可以研究下其他几种。
2
+
3
+ - [ 快速排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F.html )
4
+
5
+ > 选择一个目标值,比目标值小的放左边,比目标值大的放右边,目标值的位置已排好,将左右两侧再进行快排。
6
+
7
+ - [ 归并排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F.html )
8
+
9
+ > 将大序列二分成小序列,将小序列排序后再将排序后的小序列归并成大序列。
10
+
11
+ - [ 选择排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F.html )
12
+
13
+ > 每次排序取一个最大或最小的数字放到前面的有序序列中。
14
+
15
+ - [ 插入排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F.html )
16
+
17
+ > 将左侧序列看成一个有序序列,每次将一个数字插入该有序序列。插入时,从有序序列最右侧开始比较,若比较的数较大,后移一位。
18
+
19
+ - [ 冒泡排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F.html )
20
+
21
+ > 循环数组,比较当前元素和下一个元素,如果当前元素比下一个元素大,向上冒泡。下一次循环继续上面的操作,不循环已经排序好的数。
22
+
23
+ - [ 堆排序] ( http://www.conardli.top/docs/algorithm/%E6%8E%92%E5%BA%8F/%E5%A0%86%E6%8E%92%E5%BA%8F.html )
24
+
25
+ > 创建一个大顶堆,大顶堆的堆顶一定是最大的元素。交换第一个元素和最后一个元素,让剩余的元素继续调整为大顶堆。从后往前以此和第一个元素交换并重新构建,排序完成。
You can’t perform that action at this time.
0 commit comments