C++算法模板集合
我的常用刷题网站:http://218.5.5.242:9018/JudgeOnline/
排序
选择排序(selection sort)
1 void selection(int n,int* a){ 2 for (int i = 0;i < n;i++){ 3 for (int j = i + 1;j < n;j++){ 4 if (a[i] > a[j]){ 5 swap(a[i],a[j]); 6 } 7 } 8 } 9 }
选择排序
冒泡排序(bubble sort)
void bubble(int n,int* a){ for (int i = 0;i < n;i++){ for (int j = 0;j < n - 1;j++){ if (a[j] > a[j + 1]){ swap(a[j],a[j+1]); } } } }
冒泡排序
查找
枚举查找
bool search(int n,int* a,int x){ for (int i = 0;i < n;i++){ if (a[i] == x){ return true; } } return false; }
枚举查找
二分查找(binary search)
bool binary_search(int n,int* a,int x){ int mid,r,l; r = 0; l = n - 1; while (r < l){ mid = (r + l) / 2; if (x == mid) return true; if (x > mid) l = mid; if (x < mid) r = mid; } return false; }
二分查找
搜索
深度优先搜索(DFS)求连通块
void dfs(int x,int y,int id){ // id是连通块记号 if (是否越界) return; if (搜索过或不是指定符号) return; 标记已搜索; 搜索下一步; }
DFS求连通块
这只是一个概括,详细代码样例参见C++算法代码——细胞问题
数学专题
判断质数
1 bool prime(int n){ 2 for (int i = 2;i <= sqrt(n);i++){ 3 if (n % i == 0) return false; 4 } 5 return true; 6 }
判断质数
for循环宏定义
1 #define _for_1(i,a,b) for(i = (a);i <= (b);i++) 2 #define _for_2(i,a,b) for(i = (a);i >= (b);i--) 3 4 // 可以这样应用:_for_1(i,1,n)
for循环宏
g++运行
>g++ 文件名.cpp -o 文件名
>./文件名
g++
代码作者亲测,作者将持续更新……