CSP初赛知识点(Part2):基础算法与运算
upd.2025.8.2
CSP初赛知识点(Part2):基础算法与运算
关于一些运算的小tip
优先级:
| 级别(数字越小越优先) | 运算符 |
|---|---|
| 1 | ::(作用域解析) |
| 2 | ()(括号), ->,.(成员运算符),[](数组下标),++,--(在变量前面的自增自减),type(类型转换) |
| 3 | !(逻辑非),~(按位非)+,-(正负号),&(地址),*(指针),++,--(在变量后面的自增自减),sizeof, delete, new |
| 4 | *(乘法),/(除法),%(取余) |
| 5 | +(加法),-(减法) |
| 6 | <<(左移),>>(右移) |
| 7 | <=,=>,<,> (四种不等式比较) |
| 8 | ==, != (相等关系的比较) |
| 9 | &, |, ^ (按位与,或,异或) |
| 10 | &&, || (逻辑与和逻辑或) |
| 11 | :?(三目运算) |
| 12 | =, +=, -= .....(跟赋值有关的所有运算) |
| 13 | throw(扔报错) |
| 14 | , (逗号表达式) |
关于取模%运算
C++的%叫做取模运算,而python等一些语言的%叫做取余运算,这两者在对于一正一负运算的情况下并不等价
在C++的取模运算下:
\(-7 \% 4 = -3,(-1*4 - 3)\)向负无穷舍入
在Python的取余运算下:
\(-7 \% 4 = 1,(-2*4 + 1)\)向正无穷舍入
请注意在初赛中我们一律使用C++的取模运算,取模结果向负无穷舍入
关于赋值运算符(c++ trick)
以下写法是合法的,可以达成ans = ans * x % p的效果
(ans*=x)%=p
关于基础算法
臭名昭著的排序算法稳定性
| 算法名称 | 平均复杂度 | 最好情况 | 最劣情况 | 空间复杂度 | 稳定性 |
|---|---|---|---|---|---|
| 冒泡排序 | \(O(n^2)\) | \(O(n)\) | \(O(n^2)\) | \(O(1)\) | 稳定 |
| 选择排序 | \(O(n^2)\) | \(O(n^2)\) | \(O(n^2)\) | \(O(1)\) | 不稳定 |
| 插入排序 | \(O(n^2)\) | \(O(n)\) | \(O(n^2)\) | \(O(1)\) | 稳定 |
| 希尔排序(就当作nlog级别) | \(O(nlogn)\) | \(O(nlogn)\) | \(O(nlog^2n)\) | \(O(1)\) | 不稳定 |
| 归并排序 | \(O(nlogn)\) | \(O(nlogn)\) | \(O(nlogn)\) | \(O(n)\) | 稳定 |
| 快速排序 | \(O(nlogn)\) | \(O(nlogn)\) | \(O(n^2)\) | \(O(logn)\) | 不稳定 |
| 堆排序 | \(O(nlogn)\) | \(O(nlogn)\) | \(O(nlogn)\) | \(O(1)\) | 不稳定 |
| 基数排序 | \(O(nk)\) | \(O(nk)\) | \(O(nk)\) | \(O(n + k)\) | 稳定 |

浙公网安备 33010602011771号