数据结构C++——分而治之算法

一、思想

divide - conquer

  • 把问题分解成两个或多个更小的问题
  • 分别解决每个小问题
  • 把各小问题的解答组合起来,即可得到原问题的解

二、 归并排序

Merge Sort

  • 利用分而治之方法进行排序算法
  • 将n 个元素按非递增顺序排列
    • 若n 为1,算法终止(base)
    • 否则
      将这一元素集合分割成两个或更多个子集合
      对每一个子集合分别排序
      将排好序的子集合并为一个集合
template<class T>
mergeSort( T *a, int left, int right)
{
   
	//对a[left:right]中的元素进行排序
	if (left < right) {
   //至少两个元素
		int middle = (left + right)/2; //中心位置
		mergeSort(a, left, middle);
		mergeSort(a, middle +1, right);
		merge(a, b, left, middle, right); //从a合并到b
		copy(b, a, left, right); //排序结果复制到a
	}
}

在这里插入图片描述

分段:

template<class T>
void mergeSort(T a[], int n)
{
   // 使用归并排序算法对a[0:n-1] 进行排序
	T *b = new T [n];
	int segmentSize = 1; // 段的大小
	while (segmentSize < n) {
   
		mergePass(a, b, segmentSize, n); // 从a归并到b
		segmentSize += segmentSize;
		mergePass(b, a, segmentSize, n); // 从b 归并到a
		segmentSize += segmentSize;
	}
}

template<class T>
void merge(T c[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

边懵懵'.ㅅ'

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

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

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

打赏作者

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

抵扣说明:

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

余额充值