1.题目
归并排序
2.数据结构与算法
data structure:vector
algorithm:分治递归
原问题:序列[0, n)的排序问题
子问题:两个子序列[0, mid)与[mid, n)的排序问题
平凡问题:两个有序子序列[0, mid)与[mid, n)的二路归并问题
递归基:子序列区间长度为1.此时只有一个元素,自然成序,直接return即可;
3.源代码
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <time.h>
#include <stdlib.h>
using namespace std;
void merge(vector<int> &v, int lo, int mid, int hi){
int lb = mid - lo;
int lc = hi - mid;
vector<int> v1; //申请1个临时vector v1,将左侧复制入v1
for (int i = 0; i < lb; i++) v1.push_back(v[lo + i]);
for (int i=0, j=0, k=0; j<lb||k<lc;)
{
if(j<lb && (v1[j]<=v[mid+k] || lc<=k)) {
v[lo+i] = v1[j]; i++; j++;}
if(k<lc && (v[mid+k]<v1[j] || lb