题目大意: 给出N个数字的序列以及某次排序后的结果,判断是插入排序还是堆排序,并输出下一次排序的结果。
与PAT A1089 Insert or Merge 类似,不过这里考察的是堆排序,注意堆排序的过程中,一次向下调整结束(即将无序序列中的最大值放到堆顶),算是一步结束。判断给出的序列与模拟过程中的序列是否相等时,应当放在每次向下调整结束后判断。
AC代码:
#include <vector>
#include <cstdio>
using namespace std;
bool judgeInsert(const vector<int> &vc, const vector<int> &partSorted)
{
vector<int> v = vc;
bool flag = false;
for (int i = 1; i < v.size(); ++i)
{
int tmp = v[i];
int j;
for (j = i; j > 0 && v[j-1] > tmp; --j)
v[j] = v[j-1];
v[j] = tmp;
if(flag)
{
printf("Insertion Sort\n");
for (int k = 0; k < v.size(); ++k)