题目链接:点击打开链接
题目大意:略。
解题思路:插入排序的特点是:b数组前面的顺序是从小到大的,后面的顺序不一定,但是一定和原序列的后面的顺序相同!所以只要遍历一下前面几位,遇到不是从小到大的时候,开始看b和a是不是对应位置的值相等,相等就说明是插入排序,否则就是堆排序啦!
- 插入:sort() 函数
- 堆:pop_heap() 函数
AC 代码
1.#include<bits/stdc++.h> #include<cmath> #define mem(a,b) memset(a,b,sizeof a); #define INF 0x3f3f3f3f #define MOD 1000000007 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; }