首页 > 其他分享 >分治法

分治法

时间:2023-11-01 22:12:08浏览次数:31  
标签:10 MergeSort int 分治 ++ n1 n2

什么是分治法

分解-->解决-->合并

归并排序

#include<stdio.h>
#include<math.h>

//

void Merge(int A[], int p, int q, int r) {
	int i, j, k;

	int L[50], R[50];

	int n1 = q - p + 1, n2 = r - q;

	//为L和R数组赋值
	for (i = 0; i < n1; i++) {
		L[i] = A[p + i];
	}

	for (j = 0; j < n2; j++) {
		R[j] = A[j + q + 1];
	}

	L[n1] = 10;
	R[n2] = 10;

	for (k = p; k < r + 1; k++) {
		if (L[i] < R[j]) {
			A[k] = L[i];
			i++;
		}
		else {
			A[k] = R[j];
			j++;
		}
	}


}


void MergeSort(int A[], int p, int r) {
	int q;
	if (p < r) {
		q = (p + r) / 2;
		MergeSort(A, p, q);
		MergeSort(A, q + 1, r);

		Merge(A, p, q, r);
	}
}

int main() {
	int A[] = {9,4,6,1,7,2,8,3,0,10};
	MergeSort(A, 0, 9);

	for (int i = 0; i < 10; i++) {
		printf("%d ", A[i]);
	}

	return 0;
}

标签:10,MergeSort,int,分治,++,n1,n2
From: https://www.cnblogs.com/liuzijin/p/17804147.html

相关文章

  • F. Unique Occurrences(线段树分治+可撤销并查集)
    F.UniqueOccurrences假如我们删除所有权值为x的边,那么所有权值为x的边对答案的贡献就是\(\sumsz[u]*sz[v]\)sz表示两个联通块的大小,且(u,v)的边权为x我们可以用可撤销并查集来进行处理,简单来说就是将一条边的存在时间看作区间,然后挂到线段树上,然后遍历到每个叶子的时候进行......
  • 根号分治学习笔记
    根号分治的核心思想是平衡。板子题。很容易想到两种暴力:一是不做预处理,每次询问暴力查询,这样复杂度是\(\mathcalO(q\times\dfrac{n}{p})\)。二是预处理每个池子的值,每次\(\mathcalO(1)\)查询,复杂度为\(\mathcalO(np)\)。观察两个式子,由于\(q,n\)同阶,结合以下两种算法,......
  • 点分治
    第一场\(csp\)后的第一篇博客,我已经\(OIer\)大半年了,再也不是之前那个轻狂的小朋友了。。。所以考虑维护一种算法支持查询树上第\(k\)短的路径是否存在。首先构造两个函数\(\{dfsdist,dfssize\}\),当然其中\(dfssize\)主要是计算重心的。这两个函数相对比较好些,其......
  • 分治法
               ......
  • 棋盘覆盖——分治算法的典例
    问题描述在一个\({2^k}\times{2^k}(K\geqslant0)\)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格。棋盘覆盖问题要求用图所示的4种不同形状的\(L\)型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何2个\(L\)型骨牌不得重叠覆盖。问题分析算法设计......
  • 根号分治
    前言因为觉得这个思想很有意思,最近也见到了许多使用根号分治的题目,自己也出了一些用根号分治的题目,所以想总结一下。(下文各种根号分治的名字是我掰出来的,应该有别的称呼)对文章的细节有疑问或是发现错误的欢迎提出。介绍根号分治是一种在对数据规模分类讨论的基础上利用不同算......
  • 【根号分治】P9212 「蓬莱人形」 题解
    P9212看到除法相关容易想到根号分治。先对\(x,y\)进行讨论,不妨令\(0\lex,y<m\)。\(x<y\)时,当满足\(a_i+y<m\)或\(a_i+x\gem\)时,即当\(a_i<m-y\)或\(a_i\gem-x\)满足\((a_i+x)\bmodm<(a_i+y)\bmodm\),即\(a_i\bmodm\in[0,m-y-1]\bigcup[m-x,m......
  • CDQ分治和三维偏序
    专题:CDQ分治本页面将完整介绍CDQ分治。简介CDQ分治是一种思想而不是具体的算法,与动态规划类似。目前这个思想的拓展十分广泛,依原理与写法的不同,大致分为三类:解决和点对有关的问题。1D动态规划的优化与转移。通过CDQ分治,将一些动态问题转化为静态问题。CDQ分治的......
  • cdq 分治
    cdq分治的思路仍是处理跨过当前区间中点的贡献,但递归顺序是左子区间、当前区间、右子区间。这仍然满足处理当前区间时两个子区间的相对顺序不变(但左子区间不一定是有序的)从嵌套数据结构的观点看,cdq分治就是树套树外层树的中序遍历,优点是空间少一个\(\log\)且常数更小LG4093......
  • 点分治
    点分治1.给定一个带边权的树,共有\(m\)个询问,询问距离为\(k\)的点对是否存在做法1:暴力dfs做法2:\(lca\)(时间复杂度\(O(n^2\logn)\))做法3:点分治(时间复杂度\(O(n\logn)\))思路:1.取一个节点\(u\)2.统计经过\(u\)的链经过\(u\)的链两端点必定在不同子树中记录子节......