1
1
2
2
- [ 1 时间复杂度、空间复杂度、排序、异或运算] ( #1 )
3
- * [ 1.1 时间复杂度] ( #11------ )
4
- + [ 1.1.1 排序操作] ( #111----- )
5
- - [ 1.1.1.1 选择排序] ( #1111----- )
6
- - [ 1.1.1.2 冒泡排序] ( #1112----- )
7
- - [ 1.1.1.3 插入排序] ( #1113----- )
8
- * [ 1.2 空间复杂度] ( #12------ )
9
- * [ 1.3 常数项时间复杂度] ( #13--------- )
10
- * [ 1.4 算法最优解] ( #14------ )
11
- * [ 1.5 常见时间复杂度] ( #15-------- )
12
- * [ 1.6 算法和数据结构脉络] ( #16---------- )
13
- * [ 1.7 认识对数器] ( #17------ )
14
- * [ 1.8 认识二分法] ( #18------ )
15
- * [ 1.9 认识异或运算] ( #19------- )
16
-
17
- <h1 id =' 1 ' >1 时间复杂度、空间复杂度、排序、异或运算</h2 >
18
-
19
- ## 1.1 时间复杂度
3
+ * [ 1.1 时间复杂度] ( #11 )
4
+ + [ 1.1.1 排序操作] ( #111 )
5
+ - [ 1.1.1.1 选择排序] ( #1111 )
6
+ - [ 1.1.1.2 冒泡排序] ( #1112 )
7
+ - [ 1.1.1.3 插入排序] ( #1113 )
8
+ * [ 1.2 空间复杂度] ( #12 )
9
+ * [ 1.3 常数项时间复杂度] ( #13 )
10
+ * [ 1.4 算法最优解] ( #14 )
11
+ * [ 1.5 常见时间复杂度] ( #15 )
12
+ * [ 1.6 算法和数据结构脉络] ( #16 )
13
+ * [ 1.7 认识对数器] ( #17 )
14
+ * [ 1.8 认识二分法] ( #18 )
15
+ * [ 1.9 认识异或运算] ( #19 )
16
+
17
+ <h1 id =' 1 ' >1 时间复杂度、空间复杂度、排序、异或运算</h1 >
18
+
19
+ <h2 id =' 11 ' >1.1 时间复杂度</h2 >
20
+
20
21
- 常数时间操作:
21
22
1 . 算数运算:+ - * /
22
23
2 . 位运算:>>(带符号右移动)、 >>>(不带符号右移动) 、 <<、 | 、& 、^
@@ -38,9 +39,10 @@ y = an^2 + bn + c
38
39
39
40
==忽略掉低阶项,忽略掉常数项,忽略掉高阶项的系数,得到时间复杂度为n^2==
40
41
41
- ### 1.1.1 排序操作
42
+ <h3 id =' 111 ' >1.1.1 排序操作</h3 >
43
+
44
+ <h4 id =' 1111 ' >1.1.1.1 选择排序</h4 >
42
45
43
- #### 1.1.1.1 选择排序
44
46
``` Java
45
47
package class01 ;
46
48
@@ -159,7 +161,8 @@ public class Code01_SelectionSort {
159
161
160
162
}
161
163
```
162
- #### 1.1.1.2 冒泡排序
164
+ <h4 id =' 1112 ' >1.1.1.2 冒泡排序</h4 >
165
+
163
166
``` Java
164
167
package class01 ;
165
168
@@ -272,7 +275,8 @@ public class Code02_BubbleSort {
272
275
273
276
}
274
277
```
275
- #### 1.1.1.3 插入排序
278
+ <h4 id =' 1113 ' >1.1.1.3 插入排序</h4 >
279
+
276
280
``` Java
277
281
package class01 ;
278
282
@@ -392,28 +396,28 @@ public class Code03_InsertionSort {
392
396
393
397
==插入排序和前面两种排序的不同是在于,插入排序跟数组初始顺序有关,在初始有序的情况下,有可能时间复杂度为O(N),有可能为O(N ^2),但是我们估计时间复杂度要按照最差的情况来估计,所以插入排序的时间复杂度仍然O(N ^2)==
394
398
395
- ## 1.2 空间复杂度
399
+ < h2 id = ' 12 ' > 1.2 空间复杂度</ h2 >
396
400
397
401
申请有限几个变量,和样本量n没关系,就是空间复杂度O(1),如果要开辟一个空间数组和样本量n是一样大,用来支持我们的算法流程那么O(N)。反之用户就是要实现数组拷贝,我们开辟一个新的n大小数组用来支撑用户的需求,那么仍然是O(1)
398
402
399
-
400
- ## 1.3 常数项时间复杂度
403
+ <h2 id =' 13 ' >1.3 常数项时间复杂度</h2 >
401
404
402
405
如果两个相同时间复杂度的算法要比较性能,这个时候需要比较单个常数项时间,对能力要求较高,没有意义,不如样本量试验实际测试来比较
403
406
404
- ## 1.4 算法最优解
407
+ < h2 id = ' 14 ' > 1.4 算法最优解</ h2 >
405
408
406
409
我们认为最优解的考虑顺序是,先满足时间复杂度指标,再去使用较少的空间。一般来说,算法题,ACM等不会卡常数项时间
407
410
408
- ## 1.5 常见时间复杂度
411
+ <h2 id =' 15 ' >1.5 常见时间复杂度</h2 >
412
+
409
413
> 依次从好到坏 O(1) -> O(logN) -> O(N) -> O(N* logN) -> O(N^2) -> O(N^3) ... -> O(N!)
410
414
411
- ## 1.6 算法和数据结构脉络
415
+ < h2 id = ' 16 ' > 1.6 算法和数据结构脉络</ h2 >
412
416
413
417
1 . 知道怎么算的算法
414
418
2 . 知道怎么试的算法(递归)
415
419
416
- ## 1.7 认识对数器
420
+ < h2 id = ' 17 ' > 1.7 认识对数器</ h2 >
417
421
418
422
1 . 准备你想要测试的方法a
419
423
2 . 实现一个复杂度不好,但是容易实现的方法b
@@ -422,7 +426,7 @@ public class Code03_InsertionSort {
422
426
5 . 如果有一个随机样本使得对比结果不一致,打印样本进行人工干预,改对方法a和方法b
423
427
6 . 当样本数量很多,测试对比依然正确,可以确定方法a已经正确
424
428
425
- ## 1.8 认识二分法
429
+ < h2 id = ' 18 ' > 1.8 认识二分法</ h2 >
426
430
427
431
1 . 在一个有序数组中,找某个数是否存在
428
432
@@ -703,8 +707,7 @@ public class Code06_BSAwesome {
703
707
704
708
}
705
709
```
706
-
707
- ## 1.9 认识异或运算
710
+ <h2 id =' 19 ' >1.9 认识异或运算</h2 >
708
711
709
712
异或运算:相同为0,不同为1
710
713
0 commit comments