【模板】二分算法 + 快速幂 + 快排

本文深入解析了二分搜索算法的两种版本,以及快速幂算法的递归与非递归实现方式。详细阐述了算法的运行逻辑与代码实现,为读者提供了理解和应用这些核心算法的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二分算法

版本一

将区间[l, r]划分成[l, mid]和[mid + 1, r]

int bsearch_1(int l, int r)
{
    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid)) r = mid;
        else l = mid + 1;
    }
    return l;
}

版本二

将区间[l, r]划分成[l, mid - 1]和[mid, r]
为了防止死循环,计算mid时需要加1

int bsearch_2(int l, int r)
{
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}

快速幂

递归


int pow_mod(int a, int n, int m)
{
    if(n == 0) return 1;
    int x = pow_mod(a, n/2, m);
    long long ans = (long long)x * x % m;
    if(n % 2 == 1) ans = ans *a % m;
    return (int)ans;
}

非递归



int pow_mod(int a, int n, int m)
{
    long long ans = 1;
    while(n){
        if(n&1){
            ans = (ans * a) % m;
        }
        a = (a * a) % m;
        n >>= 1;
    }
    return ans;
}

快排

void quickSort(int *array, int left, int right)
{
	if(left < right)
	{
		int pivot = array[left];
		int low = left, high = right;
		while(low < high)
		{
			while(array[high] >= pivot && low < high)
				high--;
			array[low] = array[high];
			
			while(array[low] <= pivot && low < high)
				low++;
			array[high] = array[low];
		}
		array[low] = pivot;
		
		quickSort(array, left, low - 1);
		quickSort(array, low + 1, right);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值