1098. Insertion or Heap Sort (25)[插入和堆排序]

2023-12-02 15:58

本文主要是介绍1098. Insertion or Heap Sort (25)[插入和堆排序],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 原题: https://www.patest.cn/contests/pat-a-practise/1098

2. 思路:

题意:
插入与堆排序判断。
思路:
插入排序特点:前i个元素有序,后面的和原序列相等。
大根堆排序特点: 后面j个元素有序,第一个元素为前N-j个元素的最大值,且小于后j个。
搞清楚特点就简单了。
先判断是否插入。
若不是,进行堆排。
已AC

3. 源码:

#include<iostream>
#include<algorithm>//使用sort和swap函数
#include<vector>
using namespace std;int N;//元素数
vector<int> ini, jud;//分别为初始和待判断序列
int isInsert();//判断是否插入,返回1和0
void print();//输出序列
void heapSort();//堆排序
void adjustDown(int n);//将堆顶元素向下调整成为一个新堆int main(void)
{//freopen("in.txt", "r", stdin);cin >> N;ini.resize(N+1);//为便于堆的特点,即a[i] > a[2*i] 即a[2*i+1],从1开始。0无法处理jud.resize(N+1);for (int i = 1; i <= N; i++)cin >> ini[i];for (int i = 1; i <= N; i++)cin >> jud[i];if (isInsert() == 1)//插入return 0;elseheapSort();//堆排序return 0;
}int isInsert()//判断是否插入,返回1和0
{int i;for (i = 1; i < N && jud[i] <= jud[i + 1]; i++);//找出无序的位置int pos = i + 1;for (int j = pos; j <= N; j++)//判断后面的是否一致{if (ini[j] != jud[j])return 0;}cout << "Insertion Sort\n";sort(jud.begin()+1, jud.begin() + pos + 1);//排序输出print();return 1;
}void heapSort()//堆排序
{int pos;for (pos = N; pos > 0 && jud[1] <= jud[pos]; pos--);//找出需要调整的位置if (pos != 1){swap(jud[1], jud[pos]);//堆顶和末尾进行交换adjustDown(pos - 1);//对交换后的调整成新堆}cout << "Heap Sort\n";print();return;
}void adjustDown(int n)//将堆顶元素向下调整成为一个新堆
{int x = jud[1];//保存堆顶元素int pa, ch;//分别为父结点编号,子结点编号for (pa = 1; pa * 2 <= n; pa = ch){ch = pa * 2;if (ch < n && jud[ch] < jud[ch + 1])//找出子结点较大的那个ch++;if (x < jud[ch])//子结点比父结点大jud[pa] = jud[ch];elsebreak;}jud[pa] = x;return;
}void print()
{for (int i = 1; i <= N; i++){if (i == 1)cout << jud[i];elsecout << ' ' << jud[i];}cout << endl;
}


这篇关于1098. Insertion or Heap Sort (25)[插入和堆排序]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/445928

相关文章

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心:连续和(count)< 0时,放弃当前起点的连续和,将下一个数作为新起点,这里提供使用贪心算法解决本题的代码。动态规划:dp[i]:以nums[i]为结尾的最长连续子序列(子数组)和。 dp[i] = max(dp[i - 1]

matplotlib绘图中插入图片

在使用matplotlib下的pyplot绘图时,有时处于各种原因,需要采用类似贴图的方式,插入外部的图片,例如添加自己的logo,或者其他的图形水印等。 一开始,查找到的资料都是使用imshow,但是这会有带来几个问题,一个是图形的原点发生了变化,另外一个问题就是图形比例也产生了变化,当然最大的问题是图形占据了整个绘图区域,完全喧宾夺主了,与我们设想的只在绘图区域中占据很小的一块不相符。 经

stl的sort和手写快排的运行效率哪个比较高?

STL的sort必然要比你自己写的快排要快,因为你自己手写一个这么复杂的sort,那就太闲了。STL的sort是尽量让复杂度维持在O(N log N)的,因此就有了各种的Hybrid sort algorithm。 题主你提到的先quicksort到一定深度之后就转为heapsort,这种是introsort。 每种STL实现使用的算法各有不同,GNU Standard C++ Lib

MongoDB学习—(4)文档的插入,删除与更新

一,文档的插入 插入命令有两个一个为insert,另一个为save,两者的区别为 db.[documentName].insert({..})插入的数据不允许重复,即_id不可相同 db.[docuemntName].save({..})插入的数据允许重复,如果整条数据内容相同,则不发生替换,如果数据有做不同,则将原数据替换 二,删除文档数据 db.[docuementName].r

240907-Gradio插入Mermaid流程图并自适应浏览器高度

A. 最终效果 B. 示例代码 import gradio as grmermaid_code = """<iframe srcdoc='<!DOCTYPE html><html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width" /><title>My static Spa

java的Timestamp时间插入mysql的datetime字段是0000-00-00 00:00:00

Mysql 与 java 的时间类型             MySql的时间类型有              Java 中与之对应的时间类型                  date                                               java.sql.Date               Datetime

Hibernate插入数据时,报错:org.springframework.dao.DataIntegrityViolationException: could not insert: [cn.itc

在用junit测试:插入数据时,报一下错误: 错误原因: package junit;import org.junit.Test;import cn.itcast.crm.container.ServiceProvinder;import cn.itcast.crm.dao.ISysUserDao;import cn.itcast.crm.domain.SysRole;