AcWing算法基础课——简单算法模板

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

 说明

        本篇文章只给出代码模板,以及自己对该模板的理解。如果想看正确的算法思路,可以移步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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beau_Will

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值