PAT A 1098. Insertion or Heap Sort (25)

来源:互联网 发布:上瘾2网络剧台湾版网盘 编辑:程序博客网 时间:2024/06/05 07:30
和之前一个排序题差不多。不过要注意堆排列时元素序号最好从1开始,此外插入排序起始序号要从第三个元素开始。
#include <algorithm>#include <cstdio>using namespace std;int ori[102],comp[102],tmpo[102];bool insertsort(const int &n){bool flag=false;for(int i=3;i<=n&&!flag;++i){flag=equal(tmpo+1,tmpo+n+1,comp+1);sort(tmpo+1,tmpo+i+1);}if(flag)printf("Insertion Sort\n");return flag;}void adjust(const int &n,const int &v){for(int i=v*2;i<=n;i*=2){if(i!=n&&tmpo[i]<tmpo[i+1])++i;if(tmpo[i]>tmpo[i/2]){swap(tmpo[i],tmpo[i/2]);}}}void heapsort(const int &n){for(int i=(n/2);i>=1;--i){adjust(n,i);}bool flag=false;int i=n;while(i>=1&&!flag){flag=equal(tmpo+1,tmpo+n+1,comp+1);swap(tmpo[i],tmpo[1]);--i;adjust(i,1);}if(flag)printf("Heap Sort\n");}int main(void){//freopen("in.log","r",stdin);int n;scanf("%d",&n);for(int i=1;i<=n;++i){scanf("%d",&ori[i]);tmpo[i]=ori[i];}for(int i=1;i<=n;++i)scanf("%d",&comp[i]);if(!insertsort(n)){copy(ori+1,ori+n+1,tmpo+1);heapsort(n);}for(int i=1;i<=n;++i){(i!=1)?printf(" %d",tmpo[i]):printf("%d",tmpo[i]);}return 0;}

原创粉丝点击