一、分治法思想介绍
将原始问题分解为几个规模较小但类似于原问题容易解决的子问题,递归地求解这些子问题,然后再合并子问题的解来建立原始问题的解。
分冶法在递归时的步骤
分解: 原问题分解为子问题,子问题是原问题规模较小的实例。
解决: 递归地解决子问题,若子问题足够小,则直接求解。
合并: 合并子问题的解。得到原问题解。
在归并排序中的体现
分解: 分解待排序的n个元素的序列成各自具有n/2个元素的两个子序列。
解决: 使用归并排序递归地排序两个子序列。
合并: 合并两个已排序的子序列一产生最终已排序的序列
二、归并排序
辅助程序伪代码
主程序伪代码
举个例子
实现代码
// Project: Merge_Sort.cbp
// File : Merge_Sort.cpp
#include <iostream>
using namespace std;
void Merge(
int arr[],
int startIndex,
int middleIndex,
int endIndex)
{
// Numbers of elements that will be sorted
// from startIndex until endIndex
int totalElements = endIndex - startIndex + 1;
// Temporary array to store merged array
int * tempArray = new int[totalElements];
// Index of left subarray
// arr[startIndex ... middleIndex]