1035 插入与归并
参考了大神的代码https://www.liuchuo.net/archives/503
#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <math.h>
#include <string>
using namespace std;
int main()
{
int n;
cin >> n;
//插入还是归并
vector<int>first(n);
vector<int>middle(n);
for (int i = 0; i < n; i++)
{
cin >> first[i];
}
for (int i = 0; i < n; i++)
{
cin >> middle[i];
}
int i = 0, j = 0;
//找到顺序排序的最后一个数字
while (i<n-1 && middle[i]<=middle[i+1])
{
i++;
}
//如果是插入排序,后面的数组与原来的一样
j = i + 1;
while (j<n && middle[j]==first[j])
{
j++;
}
if (j==n)
{
cout << "Insertion Sort"<<endl;
sort(first.begin(), first.begin() + i + 2);
}
else
{
cout << "Merge Sort" << endl;
//归并排序
int k = 1, flag = 1;
while (flag)
{
flag = 0;
for ( i = 0; i < n; i++)
{
if (first[i] != middle[i])
flag = 1;
}
k = k * 2;
for (i = 0; i < n/k; i++)
{
sort(first.begin() + i * k, first.begin() + (i + 1) * k);
}
sort(first.begin() + n / k * k, first.begin() + n);
}
}
for ( j = 0; j< n; j++)
{
if (j!=0)
{
printf(" ");
}
printf("%d", first[j]);
}
return 0;
}