hahahahaqg 2023-12-05 00:11 采纳率: 12.5%
浏览 21

PTA插入排序还是堆排序 只过了前两个测试点


#include<bits/stdc++.h>
using namespace std;

const int N=110;

int n;
int a[N],b[N];

int main(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>b[i];
    for(int i=1;i<=n;i++)cin>>a[i];
    if(a[1]<=a[2]){
        cout<<"Insertion Sort"<<endl;
        int t;
        for(int i=n;i>=1;i--){
            if(a[i]!=b[i]){
                t=i+1;
                break;
            }
        }
        int temp=a[t];
        for(int i=t-1;i>=1;i--){
            if(a[i]>temp)a[i+1]=a[i];
            else{
                a[i+1]=temp;
                break;
            }
        }
        for(int i=1;i<=n;i++){
            cout<<a[i];
            if(i!=n)cout<<" ";
        }
    }
    else{
        cout<<"Heap Sort"<<endl;
        int t;
        for(int i=n;i>=2;i--){
            if(a[i]<a[i-1]){
                t=i;
                break;
            }
        }
        int temp=a[t];
        swap(a[1],a[t]);
        int i=1;
        while(i<=t-1){
            int m=i*2;
            if(a[m+1]>a[m]&&(m+1)<=t-1)m=m+1;
            if(a[i]<a[m]){
                swap(a[i],a[m]);
                i=m;
            }
            else if(a[i]>=a[m]) break;
        }
        for(int i=1;i<=n;i++){
            cout<<a[i];
            if(i!=n)cout<<" ";
        }
    }
    return 0;
}

根据维基百科的定义:

插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。

堆排序也是将输入分为有序和无序两部分,迭代地从无序部分找出最大元素放入有序部分。它利用了大根堆的堆顶元素最大这一特征,使得在当前无序区中选取最大元素变得简单。

现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法?

输入格式:
输入在第一行给出正整数 N (≤100);随后一行给出原始序列的 N 个整数;最后一行给出由某排序算法产生的中间序列。这里假设排序的目标序列是升序。数字间以空格分隔。

输出格式:
首先在第 1 行中输出Insertion Sort表示插入排序、或Heap Sort表示堆排序;然后在第 2 行中输出用该排序算法再迭代一轮的结果序列。题目保证每组测试的结果是唯一的。数字间以空格分隔,且行首尾不得有多余空格。

输入样例 1:
10
3 1 2 8 7 5 9 4 6 0
1 2 3 7 8 5 9 4 6 0
输出样例 1:
Insertion Sort
1 2 3 5 7 8 9 4 6 0
输入样例 2:
10
3 1 2 8 7 5 9 4 6 0
6 4 5 1 0 3 2 7 8 9
输出样例 2:
Heap Sort
5 4 3 1 0 2 6 7 8 9

找了一晚上愣是没找到哪里有问题QAQ

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-05 10:17
    关注

    【以下回答由 GPT 生成】

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    bool is_insertion_sort(const vector<int>& origin, const vector<int>& inter) {
        bool found = false;
        int temp = 0;
    
        for (int i = 0; i < origin.size() - 1; i++) {
            if (inter[i] > inter[i + 1]) {
                found = true;
                temp = i;
                break;
            }
        }
    
        if (found) {
            for (int i = temp + 1; i < origin.size(); i++) {
                if (origin[i] != inter[i]) {
                    return false;
                }
            }
        }
    
        return true;
    }
    
    bool is_heap_sort(const vector<int>& origin, const vector<int>& inter) {
        bool found = false;
        int temp = 0;
    
        for (int i = inter.size() - 1; i >= 1; i--) {
            if (inter[i] < inter[i - 1]) {
                found = true;
                temp = i;
                break;
            }
        }
    
        if (found) {
            for (int i = 0; i < temp; i++) {
                if (origin[i] != inter[i]) {
                    return false;
                }
            }
        }
    
        return true;
    }
    
    int main() {
        int N;
        cin >> N;
    
        vector<int> origin(N);
        vector<int> inter(N);
    
        for(int i = 0; i < N; i++) {
            cin >> origin[i];
        }
    
        for(int i = 0; i < N; i++) {
            cin >> inter[i];
        }
    
        if (is_insertion_sort(origin, inter)) {
            cout << "Insertion Sort" << endl;
            sort(inter.begin(), inter.begin() + 2);
        } else if (is_heap_sort(origin, inter)) {
            cout << "Heap Sort" << endl;
            make_heap(inter.begin(), inter.end());
            sort_heap(inter.begin(), inter.end());
        }
    
        for (int i = 0; i < N; i++) {
            cout << inter[i];
            if (i != N - 1) {
                cout << " ";
            }
        }
    
        return 0;
    }
    


    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月5日