算法基础——归并排序

算法基础——归并排序,第1张

归并排序 ( M e r g e s o r t ) (Merge sort) (Mergesort)是建立在归并 *** 作上的一种有效排序算法,它是采用分治算法的一个典型的应用。时间复杂度为 O ( N l o g N ) O(NlogN) O(NlogN),代价是需要额外的内存空间。

算法理解

我们可以先看一个图

归并排序的思想:我们先对输入数组一直进行对半拆分,直到区间内只有一个元素的时候,一个元素肯定是有序数组,然后我们在依次合并两个有序数组。

算法步骤
  1. 对输入数组进行对半拆分,直到区间内只有一个元素
  2. 设定两个指针分别两个已经有序序列的起始位置
  3. 比较两个指针所指向的元素,相对较小的元素放到合并空间,并且指针指向下一位
  4. 重复步骤3的 *** 作,直到有一个指针无指向内容
  5. 将另一个序列剩下的所有元素直接复制到合并空间序列尾。
代码实现
int n, a[MAXN], b[MAXN];

void msort(int l, int r){//归并排序
	if(l == r) return ;
	int mid = l + (r - l) / 2;//这里是二分的一个坑,如果l,r两个数很大,可能导致l+r出错。
	int i = l, j = mid + 1, k = l;
	msort(l,mid);
	msort(mid+1,r);
	while(i <= mid && j <= r){
		if(a[i] <= a[j]) b[k++] = a[i++];
		else b[k++] = a[j++];
	}
	while(i <= mid){
		b[k++] = a[i++];
	}
	while(j <= r){
		b[k++] = a[j++];
	}
	for(int t = l; t <= r; t++){
		a[t] = b[t];
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1296134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存