

\quad
这个题主要考察插入排序和归并排序的实现。每一步插入排序或归并排序后都看看是否与题目给定的目标序列一致u,若一致则打印当前排序类型和下一次排序结果。关于插入排序和归并排序请移步至博客,里面包含了这两种排序的代码和解释。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void output(vector<int> &a)
{
for (int i = 0; i < a.size(); ++i){
cout << a[i];
if(i!=a.size()-1) cout << " ";
}
cout << endl;
}
void insertSort(vector<int> a, vector<int> target)
{
int flag = 0;
for (int i = 1; i < a.size(); ++i)
{
int temp = a[i], j=i;
while(j>0 && temp<a[j-1]){
a[j] = a[j-1];
j--;
}
a[j] = temp;
if(flag){
cout << "Insertion Sort" << endl;
output(a);
return;
}
if(a==target) flag = 1;
}
return;
}
void mergeSort(vector<int> &a, vector<int> &target)
{
int flag = 0;
int n = a.size();
for (int step = 2; step/2 < n; step*=2)
{
for (int i = 0; i < n; i+=step){
sort(a.begin()+i, a.begin()+min(i+step, n));
}
if(flag){
cout << "Merge Sort" << endl;
output(a);
return;
}
if(a==target) flag = 1;
}
return;
}
int main(int argc, char const *argv[])
{
int N; cin >> N;
vector<int> a(N), target(N);
for (int i = 0; i < N; ++i) cin >> a[i];
for (int i = 0; i < N; ++i) cin >> target[i];
vector<int> b = a;
insertSort(a, target);
mergeSort(b, target);
return 0;
}
499

被折叠的 条评论
为什么被折叠?



