说明
本篇文章只给出代码模板,以及自己对该模板的理解。如果想看正确的算法思路,可以移步AcWing官网看详情。链接:常用代码模板1——基础算法 - AcWing
如有理解错误,欢迎大家批评指正。
简单算法模板
一、排序
1.1 快速排序模板
void quick_sort(int q[],int l,int r){//q是传入的数组,[l,r]是需要排序的范围
if(l>=r) return;
int i = l-1,j = r+1,x = q[l+r>>1];
while(i<j){
do i++;while(q[i]<x);
do j--;while(q[j]>x);
if(i<j) swap(q[i],q[j]);
}
quick_sort(q,l,j),quick(q,j+1,r);
}
1.2 归并排序
int tmp[N];//需要开一个临时数组tmp[],N至少跟传入的q[]数组的范围一致
void merge_sort(int q[],int l,int r){
if(l>=r) return;
int mid = r+l>>1;
merge_sort(q,l,mid),merge_sort(q,mid+1,r);
int k = 0,i = l,j = mid+1;
while(i<=mid&&j<=r){
if(q[i]<=q[j]) tmp[k++]=q[i++];
else tmp[k++]=q[j++];
}
while(i<=mid) tmp[k++]=q[i++];
while(j<=r) tmp[k++]=q[j++];
for(int i=l,j=0;i<=r;i++,j++) q[i]=tmp[j];
}
二、 二分
2.1 整数二分模板1
bool check(int x){//check函数检查x是否满足某种性质
//根据题意完善check()函数
}
//区间被划分为[l,mid],[mid+1,r]
int bsearch1(int l,int r){
while(l<r){
int mid=l+r>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
return l;
}
2.2 整数二分模板2
bool check(int x){//check函数检查x是否满足某种性质
//根据题意完善check()函数
}
//区间被划分为[l,mid-1],[mid,r]
int bsearch2(int l,int r){
while(l<r){
int mid=l+r+1>>1;
if(check(mid)) l=mid;
else r=mid+1;
}
return l;
}
浮点数二分模板
bool check(double x){//check函数检查x是否满足某种性质
//根据题意完善check(

本文提供了一系列基础IT算法的代码模板,包括快速排序、归并排序、二分查找、高精度计算、前缀和与差分操作、双指针技巧、位运算和离散化,以及区间合并,帮助理解和实现常见算法问题.
4468

被折叠的 条评论
为什么被折叠?



