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)\) 稳定

遇到填二分别忘了自己模拟一下边界情况!


posted @ 2025-08-02 22:22  ZzhAllen  阅读(14)  评论(0)    收藏  举报