PAT (Basic Level) 1035 插入与归并

题意

给定原数组和中间生成数组,问该数组是插入排序还是归并排序的中间生成数组,并输出下一个状态结果。

思路

了解两种排序方法的机制进行模拟。插入排序直接码即可,归并排序可以用sort讨巧。用vector,判数组是否相等很方便。

代码

#include <bits/stdc++.h>
using namespace std;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int n;
	cin >> n;
	vector<int> init(n);
	for (int& e : init) cin >> e;
	vector<int> cent(n);
	for (int& e : cent) cin >> e;
	vector<int> tmp = init;
	bool flag = false;
	for (int i = 1; i < n; ++i) {
		for (int j = i; j > 0; --j)  {
			if (tmp[j] < tmp[j - 1]) 
				swap(tmp[j], tmp[j - 1]);
			else 
				break;
		}
		if (flag) {
			for (int j = 0; j < n; ++j) 
				cout << tmp[j] << (j == n - 1 ? '\n' : ' ');
			break;
		}
		if (tmp == cent) {
			cout << "Insertion Sort\n";
			flag = true;
		}
	}
	tmp = init;
	flag = false;
	for (int i = 1; ; ++i) {
		for (int j = 0, seg = 1 << i; j < n; j += seg) {
			if (j + seg <= n) 
				sort(tmp.begin() + j, tmp.begin() + j + seg);
			else 
				sort(tmp.begin() + j, tmp.end());
		}
		if (flag) {
			for (int j = 0; j < n; ++j) 
				cout << tmp[j] << (j == n - 1 ? '\n' : ' ');
			break;
		}
		if (tmp == cent) {
			cout << "Merge Sort\n";
			flag = true;
		}
        if ((1 << i) >= n) break;
	}
	return 0;
} 

HINT

不定时更新更多题解,Basic Level 全部AC代码,详见 link ! ! !

发布了50 篇原创文章 · 获赞 15 · 访问量 2684

猜你喜欢

转载自blog.csdn.net/abcdefbrhdb/article/details/104592735