【计算机考研408】置换选择排序 + 代码 PAT 甲级 1171 Replacement Selection

news2024/11/17 9:44:49

王道-置换选择排序b站教学视频

置换选择排序的流程

图片比文字更好理解,故不加文字解释
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当当前工作区已经满了并且找不到合适的放入当前归并段的元素的时候,开始生成下一个归并段。
此后重复上述过程。

计算机考研可能考察置换选择排序的知识点

  1. 归并段个数 = 总的记录个数 / 每个归并段的长度 【上取整】
  2. 利用败者树选择minimax
  3. 外部排序

PAT 甲级 1171 Replacement Selection 题解

题目

给你一个长度为n的序列,和一个大小为m的内存空间,每次排序的大小不能超过m这个内存空间,使用置换选择算法,输出一个或者多个有序的序列

题解

  • 知识点

置换选择排序

用于内部排序的内存工作区WA可容纳L个记录,则每个初始归并段也只能包含L个记录,若文件共有n个记录,则初始归并段的数量r=n/L

  • 解题思路
  1. 利用priority_queue实现最小堆
  2. 将小于minimax的数放到下一行去进行处理
#include <bits/stdc++.h>
using namespace std;

int main(){
    int n, m; cin >> n >> m;
	vector<int> arr(n);
    for(int i = 0; i < n; i++){ 
    	cin >> arr[i];
    }
    priority_queue<int, vector<int>, greater<int>> wa;
    
    vector<int> v, line; // v存放下轮的数,line存放本轮的数
    //int wasize = 0; //工作区当前空闲大小
    int minimax = INT_MIN;
    
    int index = 0;
    //将数先压入工作区
    for(; index < m; index++){
    	wa.push(arr[index]);
    }

    int count = 0;
    //用于统计是否处理完序列中的所有数字
    while(count < n){
    	//因为当前工作区是第一组进入工作区的序列,所以直接处理就可以了
    	minimax = wa.top();
    	line.push_back(minimax);
    	wa.pop();
    	count++;

    	if (index < n){
    		if (arr[index] > minimax) {
    			wa.push(arr[index++]);
    		}
    		else {
    			v.push_back(arr[index++]);
    		}
    	}
    	if (wa.empty()){
    		//工作区为空的情况下
    		//说明第一行已经处理完毕了
    		for(int i = 0; i < line.size(); i++){
    			if (i == 0) cout << line[i];
    			else cout << " " << line[i];
    		}
    		cout << '\n';
    		line.clear();
    		for(int i = 0; i < v.size(); i++){
    			wa.push(v[i]);
    		}
    		v.clear();
    	}
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/375339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网易蜗牛读书产品体验报告(1.9.6版本)

本文导览本文是网易蜗牛读书的产品体验报告&#xff0c;在移动阅读市场&#xff0c;网易蜗牛读书以其独特的深度阅读和领读人的阅读机制吸引了一大批的阅读爱好者和忠实用户。本文通过对网易蜗牛读书的体验分析&#xff0c;希望进一步加深对网易蜗牛读书产品的认识了解。产品概…

详细的IO面试题汇总

IO 流简介 IO 即 Input/Output&#xff0c;输入和输出。数据输入到计算机内存的过程即输入&#xff0c;反之输出到外部存储&#xff08;比如数据库&#xff0c;文件&#xff0c;远程主机&#xff09;的过程即输出。数据传输过程类似于水流&#xff0c;因此称为 IO 流。IO 流在…

pom依赖产生的各种问题

文章目录问题一(org.apache.ibatis.session.Configuration)解决方法问题二(ERROR StatusLogger No log4j2)解决方法问题三(com.google.common.util.concurrent)解决方法问题四(start bean documentationPluginsBootstrapper)解决方法问题五(Unable to infer base url. )解决办法…

(01)Unity 中使用 HDRP

概述Unity在2019.2版本中推出HDRP&#xff08;高清渲染管线&#xff09;&#xff0c;目的是为了提高图形质量&#xff0c;实现从照片写实到风格化的图像。先看一下官方对HDRP的概述&#xff1a;高清渲染管线 &#xff08;HDRP&#xff09; 是由 Unity 构建的高保真脚本化渲染管…

【golang/go语言】Go语言之反射

本文参考了李文周的博客——Go语言基础之反射。 一、反射初识 1. 什么是反射 在计算机科学中&#xff0c;反射是指计算机程序在运行时&#xff08;run time&#xff09;可以访问、检测和修改它本身状态和行为的一种能力。用比喻来说&#xff0c;反射就是程序在运行的时候能够…

【genius_platform软件平台开发】第八十八讲:arm公司的V架构和内核发展史(整理)

1. ARM公司简介 ARM&#xff08;Advanced RISC Machines&#xff09;有三种含义&#xff1a;它是一个公司的名称、它是一类微处理器的通称、它是一种技术的名称。 ARM 公司是微处理器行业的一家知名企业&#xff0c;它是知识产权供应商&#xff0c;设计基于ARM体系的处理器&a…

5-Azidopentanoic acid,79583-98-5,5-Azidopentanoic COOH具有高效稳定,高特异性

5-Azidopentanoic acid&#xff0c;5-Azidopentanoic COOH&#xff0c;5-叠氮基戊酸产品规格&#xff1a;1.CAS号&#xff1a;79583-98-52.分子式&#xff1a;C5H9N3O23.分子量&#xff1a;143.074.包装规格&#xff1a;1g&#xff0c;5g&#xff0c;10g&#xff0c;包装灵活&a…

Spring Data JPA 之 理解 Persistence Context 的核心概念

21 理解 Persistence Context 的核心概念 21.1 Persistence Context 相关核心概念 21.1.1 EntityManagerFactory 和 Persistence Unit 按照 JPA 协议⾥⾯的定义&#xff1a;persistence unit 是⼀些持久化配置的集合&#xff0c;⾥⾯包含了数据源的配置、EntityManagerFacto…

WideDeep模型

google提出的Wide&deep模型&#xff0c;将线性模型与DNN很好的结合起来&#xff0c;在提高模型泛化能力的同时&#xff0c;兼顾模型的记忆性。wide&deep这种将线性模型与DNN的并行连接模式&#xff0c;后来称为推荐领域的经典模式&#xff0c;奠定了后面深度学习模型的…

Containerd容器运行时将会替换Docker?

文章目录一、什么是Containerd&#xff1f;二、Containerd有哪些功能&#xff1f;三、Containerd与Docker的区别四、Containerd是否会替换Docker&#xff1f;五、Containerd安装、部署和使用公众号&#xff1a; MCNU云原生&#xff0c;欢迎微信搜索关注&#xff0c;更多干货&am…

一条 SQL 查询语句是如何执行的?

MySQL是典型的C/S架构&#xff08;客户端/服务器架构&#xff09;&#xff0c;客户端进程向服务端进程发送一段文本&#xff08;MySQL指令&#xff09;&#xff0c;服务器进程进行语句处理然后返回执行结果。 问题来了。服务器进程对客户端发送的请求究竟做了什么处理呢&#…

【大数据基础】Hadoop3.1.3安装教程

来源&#xff1a; https://dblab.xmu.edu.cn/blog/2441/ 前言&#xff1a;重装解决一切bug&#xff01;事实上&#xff0c;问题中的绝大部分衍生问题都可以通过重装解决。 实验内容 创建Hadoop用户 首先按 ctrlaltt 打开终端窗口&#xff0c;输入如下命令创建新用户 : sudo…

【Spring6】| Spring对IoC的实现(核心重点)

目录 一&#xff1a;Spring对IoC的实现 1. IoC 控制反转 2. 依赖注入 2.1 set注入 2.2 构造注入 3. set注入专题 3.1 注入外部Bean 3.2 注入内部Bean 3.3 注入简单类型 3.4 级联属性赋值&#xff08;了解&#xff09; 3.5 注入数组 3.6 注入List集合和Set集合 3.7…

17- TensorFlow中使用Keras创建模型 (TensorFlow系列) (深度学习)

知识要点 Keras 是一个用 Python 编写的高级神经网络 API数据的开方: np.sqrt(784) # 28代码运行调整到 CPU 或者 GPU: import tensorflow as tf cputf.config.list_physical_devices("CPU") tf.config.set_visible_devices(cpu) 模型显示: model.summary()…

Tik Tok品牌营销,如何做好内容打法

TikTok 上做好品牌营销&#xff0c;并不能只关注品牌所获得的视频浏览量和点赞量&#xff0c;根据潜在客户需求生成的内容策略同样至关重要。通过建立营销漏斗模型&#xff0c;可以将 TikTok 策略分为三种不同类型的内容&#xff0c;从具有广泛吸引力的内容转变为具有高度针对性…

Vue组件是怎样挂载的

我们先来关注一下$mount是实现什么功能的吧&#xff1a; 我们打开源码路径core/instance/init.js: export function initMixin (Vue: Class<Component>) {......initLifecycle(vm)// 事件监听初始化initEvents(vm)initRender(vm)callHook(vm, beforeCreate)initInject…

FastDDS-3. DDS层

3. DDS层 eProsima Fast DDS公开了两个不同的API&#xff0c;以在不同级别与通信服务交互。主要API是数据分发服务&#xff08;DDS&#xff09;数据中心发布订阅&#xff08;DCPS&#xff09;平台独立模型&#xff08;PIM&#xff09;API&#xff0c;简称DDS DCPS PIM&#xf…

nacos集群模式+keepalived搭建高可用服务

实际工作中如果nacos这样的核心服务停掉了或者整个服务器宕机了&#xff0c;那整个系统也就gg了&#xff0c;所以像这样的核心服务我们必须要搞个3个或者3个以上的nacos集群部署&#xff0c;实现高可用&#xff1b; 部署高可用版本之前&#xff0c;首先你要会部署单机版的naco…

[2]MyBatis+Spring+SpringMVC+SSM整合一套通关

二、Spring 1、Spring简介 1.1、Spring概述 官网地址&#xff1a;https://spring.io/ Spring 是最受欢迎的企业级 Java 应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Jav…

激活函数入门学习

本篇文章从外行工科的角度尽量详细剖析激活函数&#xff0c;希望不吝指教&#xff01; 学习过程如下&#xff0c;先知道这个东西是什么&#xff0c;有什么用处&#xff0c;以及怎么使用它&#xff1a; 1. 为什么使用激活函数 2. 激活函数总类及优缺点 3. 如何选择激活函数 …