25版王道数据结构课后习题详细分析 第八章 8.5 归并排序、基数排序和计数排序

news/2024/9/19 11:06:30/ 标签: 数据结构, 算法, 考研

一、单项选择题

————————————————————

————————————————————

解析:我们知道插入排序不能保证在一趟排序结束后一定有元素放在最终位置上。事实上,归并排序也不能保证。例如,序列{6,5,7,8,2,1,4,3}进行一趟二路归并排序(从小到大)后为{5,6,7,8,1,2,3,4},显然它们都未被放在最终位置上。


正确答案:

————————————————————

————————————————————

解析:基数排序是基于关键字各位的大小进行排序的,而不是基于关键字的比较进行的


正确答案:

————————————————————

————————————————————

解析:归并排序在平均情况和最坏情况下的空间复杂度都是O(n),快速排序只在最坏情况下才是O(n),平均情况是O(logn)。因此,归并排序是本章所有排序算法中占用辅助空间最多的。


正确答案:

————————————————————

————————————————————

解析:前面已讲过选择排序的比较次数与序列初始状态无关,归并排序的比较次数的数量级也与序列的初始状态无关。读者应能从算法的原理方面来考虑为什么和初始状态无关。


正确答案:

————————————————————

————————————————————

解析:N个元素进行k路归并排序的趟数m满足kT=N,即m=「 log:N,本题中为「 logzn To


正确答案:

————————————————————

————————————————————

解析:N个元素进行k路归并排序的趟数m满足kT=N,这里要求的是k,代入可得k=3。
 



正确答案:

————————————————————

————————————————————

解析:注意,当一个表中的最小元素比另一个表中的最大元素还大时,比较的次数是最少的,仅比较N次;而当两个表中的元素依次间隔地比较时,即a<b<a<b<…<a,<b,时,比较的次数是最多的,为2N-1次。
建议读者对此举一反三:若将本题中的两个有序表的长度分别设为M和N,
则最多(或最少)
的比较次数是多少?时间复杂度又是多少?


正确答案:

————————————————————

————————————————————

解析:第一趟归并后{1,2},{4,63},{3,5},{7,8},共比较4次;第二趟归并后{1,2,4,6},{3,5,7,8}共比较4次;第三趟归并后{1,2,3,4,5,6,7,8},共比较6次。三趟归并共需进行14次比较。


正确答案:

————————————————————

————————————————————

解析:由于这里采用二路归并排序算法,而且是第二趟排序,因此每4个元素放在一起归并。可将序列划分为{25,50,15,35},{80,85,20, 40}和36,70},分别对它们进行排序后有{15.25,35,50%.{20,40,80,85}和{36, 70}。


正确答案:

————————————————————

————————————————————

解析:按照所有中国人的生日排序,一方面N是非常大的,另一方面关键字所含的排序码数为2,且一个排序码的基数为12,另一个排序码的基数为31,都是较小的常数值,因此采用基数排序可以在O(N)内完成排序过程。


正确答案:

————————————————————

————————————————————

解析:本题思路来自基数排序的LSD,首先应确定k、k的排序顺序,若先排k再排k,则排序结果不符合题意,排除A和C。再考虑排序的稳定性,当k排好序后,再对k排序,若对k排序采用的方法是不稳定的,则对于k相同而k不同的元素可能会改变相对次序,从而不一定能满足题设要求。直接插入排序是稳定的,而简单选择排序是不稳定的,只能选D。


正确答案:

————————————————————

————————————————————

解析:基数排序有MSD和LSD两种,基数排序是稳定的。对于A,不符合LSD 和 MSD:对于B,符合MSD,但关键字42、46的相对位置发生了变化;对于D,不符合LSD 和 MSD.


正确答案:

————————————————————

————————————————————

解析:基数排序中建立的队列个数等于进制数。


正确答案:

————————————————————

————————————————————

解析:快速排序的平均空间复杂度是O(logn),归并排序的空间复杂度是O(n),其他都是O(1)。


正确答案:

————————————————————

————————————————————

解析:考虑两个升序链表合并,两两比较表中元素,每比较一次,确定一个元素的链接位置(取较小元素,头插法)。当一个链表比较结束后,将另一个链表的剩余元素插入即可。最坏的情况是两个链表中的元素依次进行比较,因为2max(m,n)≥m+n,所以时间复杂度为O(max(m,n))。此外,每次比较把两个链表中的较小结点插入新链表的表头,直到一个链表为空,因为原链表是升序排列的,要求合并后为降序排列的,因此还要把另一个链表剩下的结点一一插入新链表的表头,不论是最好情况还是最坏情况,都需要遍历两个链表中的所有结点。


正确答案:

————————————————————

————————————————————

解析:

正确答案:

————————————————————

————————————————————

解析:基数排序的元素移动次数与序列初态无关,而其他三种排序算法都与序列初态有关。


正确答案:

————————————————————

————————————————————

解析:基数排序是一种稳定的排序算法。由于采用最低位优先(LSD)的基数排序,即第一趟对个位进行分配和收集操作,因此第一趟分配和收集后的结果是{151,301,372,892,93,43,485,946,146,236,327,9},元素372之前、之后紧邻的元素分别是301和892。


正确答案:

————————————————————

————————————————————

解析:送分题。本书对归并的定义原话是“归并的含义是将两个或两个以上的有序表合并成一个新的有序表”,而二路归并是将两个有序表合并为一个新的有序表。


正确答案:

二、综合应用题

————————————————————

————————————————————

解答:

n= 10,需要排序的趟数=l log2101=4,各趟的排序结果如下;初始序列:503,87,512,61,908,170,897,275,653,462
第一趟:87,503,61,512,170,908,275,897,462,653(长度为2)第二趟:61,87,503,512,170,275,897,908,462,653(长度为4)第三趟:61,87,170,275,503,512,897,908,462,653(长度为8)第四趟:61,87,170,275,462,503,512,653,897,908(长度为10)
 

————————————————————

————————————————————

解答:


http://www.ppmy.cn/news/1522882.html

相关文章

【Linux 从基础到进阶】Redis缓存服务安装与调优

Redis缓存服务安装与调优 引言 Redis 是一个开源的内存数据结构存储系统,广泛应用于缓存、会话管理和实时分析等场景。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合,因其高性能和灵活性,成为开发者的首选缓存解决方案。本文将介绍如何在 CentOS 和 Ubuntu 系…

Python | Leetcode Python题解之第387题字符串中的第一个唯一字符

题目&#xff1a; 题解&#xff1a; class Solution:def firstUniqChar(self, s: str) -> int:position dict()q collections.deque()n len(s)for i, ch in enumerate(s):if ch not in position:position[ch] iq.append((s[i], i))else:position[ch] -1while q and po…

Kubernetes学习指南:保姆级实操手册05——配置集群HA负载均衡

五、Kubernetes学习指南&#xff1a;保姆级实操手册05——配置集群HA负载均衡 简介&#xff1a; Keepalived 提供 VRRP 实现&#xff0c;并允许您配置 Linux 机器使负载均衡&#xff0c;预防单点故障。HAProxy 提供可靠、高性能的负载均衡&#xff0c;能与 Keepalived 完美配合…

uniapp如何监听页面滚动?

在uni-app中&#xff0c;监听页面滚动主要通过在页面的.vue文件中的onPageScroll生命周期函数来实现。onPageScroll函数会在页面滚动时触发&#xff0c;你可以在这个函数中获取到当前页面的滚动位置等信息。 下面是一个简单的示例&#xff0c;展示了如何在uni-app中监听页面滚…

解决docker启动失败的错误“Status: unknown flag: --graph”

最近服务器重启以后docker启动失败了&#xff0c;使用以下命令查看 Docker 的日志文件以获取更详细的错误信息。 journalctl -u docker.service -e 9月 05 10:50:06 iZj6c94a19bsvkhti6zw6oZ dockerd[4379]: Status: unknown flag: --graph 9月 05 10:50:06 iZj6c94a19bsvkhti…

C++音视频开发笔记目录

目录 &#x1f315;基础知识&#x1f319;详解FFmpeg&#x1f319;播放音视频时发生了什么&#xff1f; & 视频的编解码 & H264是什么&#xff1f; & MP4是什么&#xff1f; &#x1f315;流媒体环境搭建&#x1f319;windows安装FFMpeg&#x1f319;docker一键部署…

Oracle SQL Developer:数据库开发与数据管理的利器

在数据库管理和开发领域&#xff0c;拥有一个强大而灵活的工具是至关重要的。Oracle SQL Developer 是 Oracle 公司提供的一个免费集成开发环境&#xff0c;它专为数据库开发、管理和数据建模而设计。本文将详细介绍 Oracle SQL Developer 的功能、特点以及如何使用它来执行数据…

面试真题 | 记录一次面试真题

一、基本问题(80%) 1、const 和 static 的作用: const(常量): 用于定义常量值,保证变量不可被修改。在函数参数中使用const可以保证函数内不会修改参数值。用于定义常量成员函数,表明该成员函数不会修改对象的状态。可以与指针一起使用,如const int*表示指针指向的值不…

单项链表的原地反转

逻辑图如下所示&#xff1a; 只需要将需要反转的节点放到头节点位置即可&#xff0c; 使用两个指针一个指针指向需要反转的节点&#xff0c;另一个指针指向需要反转的指针的前驱节点&#xff08;其实也就是元链表的头节点&#xff09; 操作过程&#xff1a; 1 2 3 4 5 2 1 …

Base x DAOBase: Base生态聚会新加坡站,共筑链上未来

备受期待的 Base 社区聚会将于新加坡 Token2049 期间盛大举行&#xff0c;这为 Base 的支持者和生态建设者们提供了一个绝佳的相聚机会。本次活动由 Base、 DAOBase以及其他合作方共同支持。Base 是全球知名交易所 Coinbase 研发的以太坊 Layer2 扩容方案&#xff0c;致力于为用…

html css js 编程简单实现 随机抽奖 练习小项目

我们经常在某些网站上 看到一些 抽奖的活动&#xff0c;比如大转盘 随机抽奖 这种抽奖程序是怎么实现的呢&#xff1f;下面分享一个代码 简单的 实现了一下 随机抽奖的逻辑 对于网页的 美观度 就不分享了 主要是分享 js怎么 随机的 让 奖品滚顶起来 然后 某个节点 停止滚动 从而…

JavaWeb后端开发总结(3)

AOP基础 AOP概述 首先我们要知道AOP是什么&#xff1f; 看下图 个人解析&#xff1a; AOP叫做面向切面编程&#xff0c;但是实际上就是面向方法编程 图中下面一部分是一个AOP的案例 AOP快速入门案例代码实现 案例&#xff1a;测出业务中各个业务方法所需的执行时间 如果…

冒泡排序算法介绍

冒泡排序算法介绍 如果真的累了&#xff0c;就拉上窗帘关上手机关掉闹钟深呼吸一口气钻进被窝&#xff0c;好好地睡一觉&#xff0c;难熬的日子总需要一些温暖&#xff0c;而什么都不如被窝的温暖来的踏实。 冒泡排序是一种经典的排序算法&#xff0c;它通过重复遍历待排序的序…

【机器学习-一-基础概念篇】

机器学习 定义分类算法 应用 定义 机器学习最早是被Arthur Samuel 提出的一个概念&#xff0c;指计算机无需明确编程即可学习的研究领域。1950年他发明的跳棋程序&#xff0c;这个人机对弈游戏让他的声名鹊起&#xff0c;机器学习这个概念才进入大众的是视线。 在这个跳棋程序…

智能合约漏洞(四)

前言 在前面的文章中&#xff0c;我们讨论了整数溢出/下溢和时间依赖漏洞。今天&#xff0c;我们将继续探讨智能合约中两种常见的安全问题&#xff1a;拒绝服务&#xff08;Denial of Service, DoS&#xff09;和恶意合约依赖漏洞。这些漏洞可能导致合约功能的中断或意外的恶意…

机器学习引领未来:赋能精准高效的图像识别技术革新

图像识别技术近年来取得了显著进展,深刻地改变了各行各业。机器学习,特别是深度学习的突破,推动了这一领域的技术革新。本文将深入探讨机器学习如何赋能图像识别技术,从基础理论到前沿进展,再到实际应用与挑战展望,为您全面呈现这一领域的最新动态和未来趋势。 1. 引言 …

windows下安装并使用nvm

目录 一.准备工作&#xff1a;卸载node 卸载步骤 二.下载nvm 三.安装nvm 三.配置下载源【重要】 四.使用nvm安装node.js 五.nvm常用命令 六.卸载nvm 一.准备工作&#xff1a;卸载node 如果电脑上已经有node&#xff0c;那么我们需要先完全卸载node&#xff0c;再安装…

ArcGIS Pro SDK (十二)布局 10 布局导出

ArcGIS Pro SDK (十二)布局 10 布局导出 文章目录 ArcGIS Pro SDK (十二)布局 10 布局导出1 布局导出1.1 将布局导出为 PDF1.2 将地图框导出为 JPG1.3 将与地图框关联的地图视图导出到 BMP1.4 将地图系列导出为单个 PDF1.5 将地图系列导出到单个 TIFF 文件2 布局选项2.1 获…

程序的格式框架与缩进

引言 在上一课时中&#xff0c;我们介绍了 Python 的基本概念&#xff0c;并成功运行了第一个 Python 程序。本课时将深入探讨 Python 程序的基本结构、缩进的重要性&#xff0c;以及如何正确使用注释。通过本课时的学习&#xff0c;你将更好地理解 Python 代码的组织方式&…

【重学 MySQL】十八、逻辑运算符的使用

【重学 MySQL】十八、逻辑运算符的使用 AND运算符OR运算符NOT运算符异或运算符使用 XOR 关键字使用 BIT_XOR() 函数注意事项 注意事项 在MySQL中&#xff0c;逻辑运算符是构建复杂查询语句的重要工具&#xff0c;它们用于处理布尔类型的数据&#xff0c;进行逻辑判断和组合条件…