基础算法模板


基础算法模板


数组

数组去重

//n表示有效数组长度
//a[]为预处理的数组,从1开始
//去重后的数组的有效范围为[1,n]
int n,a[maxn];
n=unique(a+1,a+1+n)-a-1;

排序

归并排序

基于分治思想的排序

复杂度稳定为 $O(nlogn)$

递归形式:

//a[]为输入的预排序数组,tmp[]为中间数组
//合并区间为[l,r]
int a[maxn],tmp[maxn];
void Merge(int l,int r){
	int mid=(l+r)>>1,i=l,j=mid+1;
	for(int k=l;k<=r;++k){
		if(i<=mid&&(j>r||a[i]<a[j]))tmp[k]=a[i++];
		else tmp[k]=a[j++];
	}
	for(int i=l;i<=r;++i)a[i]=tmp[i];
}
void MergeSort(int l, int r) {
  	if (r - l<=0) return;//数组长为1不用分解
  	// 分解
  	int mid = (l + r) >> 1;
  	MergeSort(l, mid);
	MergeSort(mid+1, r);
  	// 合并
  	Merge(l,r);
}

文章作者: Paramec1um
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Paramec1um !
评论
  目录