题目链接:点击打开链接
题目大意:略。
解题思路:插入排序的特点是:b数组前面的顺序是从小到大的,后面的顺序不一定,但是一定和原序列的后面的顺序相同!所以只要遍历一下前面几位,遇到不是从小到大的时候,开始看b和a是不是对应位置的值相等,相等就说明是插入排序,否则就是堆排序啦!
- 插入:sort() 函数
- 堆:pop_heap() 函数
AC 代码
using namespace std;
typedef long long ll;
int a[110], b[110];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<n;i++) scanf("%d",&b[i]);
int i;
for(i=1;i<n;)
if(b[i]>=b[i-1]) i++;
else break;
int p=i, isIns=1;
for(;i<n;i++)
if(a[i]!=b[i]){isIns=0; break;}
if(isIns)
{
puts("Insertion Sort");
sort(b,b+p+1);
}
else
{
for(i=n-1;i>0;)
if(b[i]>=b[i-1]) i--;
else break;
puts("Heap Sort");
pop_heap(b,b+i+1);
}
for(i=0;i<n;i++)
printf("%d%c",b[i],i==n-1?'\n':' ');
return 0;
}