一、归并排序
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<vector>
#include<set>
#include <cstdlib>
#include <cstddef>
#include <list>
#include <functional>
#include <unordered_map>
#include "tes2.h"
#include <algorithm>
#include <iterator>
#include <ostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
using std::list;
using std::unordered_map;
void Msort(int *mat, int *temp, int left, int right);
void Merge(int *mat, int *temp, int left, int middle, int right);
void mergeSort(int *mat,int n)
{
if (n == 1)
return;
int *temp = new int[n];
Msort(mat, temp, 0, n - 1);
delete[]temp;
}
void Msort(int *mat, int *temp, int left, int right)
{
if (left < right)
{
int middle = (left + right) / 2;
Msort(mat, temp, left, middle);
Msort(mat, temp, middle+1, right);
Merge(mat, temp, left, middle, right);
}
}
void Merge(int *mat, int *temp, int left, int middle, int right)
{
int first = left;
int result = left;
int endfirst = middle;
int endsecond = right;
middle++;
while (left <= endfirst && middle <= endsecond)
{
if (mat[left] <= mat[middle])
temp[result++] = mat[left++];
else
temp[result++] = mat[middle++];
}
while(left<=endfirst)
temp[result++] = mat[left++];
while (middle <= endsecond)
temp[result++] = mat[middle++];
for (int i = first; i < re