这算是比较难的一个题目了。有好几个坑。
首先通过比对第一个不满足有序的数字,确实可以找出来是哪种排序方式。
(找到第一个顺序不对的数以后从这个地方往后遍历,看看和原数组是不是一样即可找排序方式)
But找出排序方式以后,这只是完成了第一步,还有需要按规定方式再迭代一次,这就比较麻烦了。
对于插入排序还好,调用sort函数往后以移动一个数即可。
但是归并排序就麻烦多 了。
坑点如下:
①.下次需要归并的数列,最后不足归并数量(测试点5)
例如:
11
3 1 2 8 7 5 9 4 11 0 6
1 2 3 8 4 5 7 9 0 6 11
②.归并的迭代次数问题(测试点6),不可以通过扫描前面的有次序的数的个数得到迭代次数
例如:
8
1 2 3 8 4 3 1 2
1 2 3 8 3 4 1 2
附AC代码如下:
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
int main() {
int N, i, m;
set<int>S;
scanf_s("%d", &N);
vector<int>V(N), T(N);
for (int<