其他分享
首页 > 其他分享> > PAT甲级1098 Insertion or Heap Sort 模拟插入和堆排序

PAT甲级1098 Insertion or Heap Sort 模拟插入和堆排序

作者:互联网

在这里插入图片描述
在这里插入图片描述

代码如下:

//模拟插入排序和堆排序
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

int n;
vector<int>init;//初始的数组
vector<int>goal;//当前的数组
vector<int>cur;//当前变化中的数组

void max_heapify(int i,int h){
    int l,r,largest;
    l=2*i+1;
    r=2*i+2;

    if(l<=h&&init[l]>init[i]){
        largest=l;
    }else{
        largest=i;
    }
    if(r<=h&&init[r]>init[largest]){
        largest=r;
    }
    if(largest!=i){
        swap(init[i],init[largest]);
        max_heapify(largest,h);
    }
}

int main(){
    cin>>n;
    init.resize(n);
    goal.resize(n);
    cur.resize(n);
    for(int i=0;i<n;i++){
        cin>>init[i];
        cur[i]=init[i];
    }

    for(int i=0;i<n;i++){
        cin>>goal[i];
    }

    bool flag=false;
    for(int i=0;i<n;i++){
        sort(cur.begin(),cur.begin()+i+1);
        if(cur==goal){//若满足插入排序
            flag=true;
        }
    }

    if(flag){
        int pos=n-1;
        int cur_num=goal[0];//当前数字
        for(int i=0;i<n;i++){
            if(goal[i]<cur_num){
                pos=i;
                break;
            }
            cur_num=goal[i];
        }
        sort(goal.begin(),goal.begin()+pos+1);
        cout<<"Insertion Sort"<<endl;
        for(int i=0;i<n;i++){
            if(i!=n-1){
                cout<<goal[i]<<" ";
            }else{
                cout<<goal[i];
            }
        }
    }else{
        for(int i=n/2-1;i>=0;i--){
            max_heapify(i,n-1);
        }

        bool flag1=false;
        for(int i=n-1;i>=1;i--){
            swap(init[0],init[i]);
            for(int j=i/2-1;j>=0;j--){
                max_heapify(j,i-1);
            }
            if(flag1==true){
                cout<<"Heap Sort"<<endl;
                for(int j=0;j<n;j++){
                    if(j!=n-1){
                        cout<<init[j]<<" ";
                    }else{
                        cout<<init[j];
                    }
                }
                break;
            }
            if(init==goal){
                flag1=true;
            }
        }
    }
    return 0;
}

标签:Sort,PAT,int,max,heapify,init,Insertion,largest,include
来源: https://blog.csdn.net/weixin_44123362/article/details/100835535