6.22面试问题【1】长链表排序选择归并还是快排

先问快排和归并的思路?

  • 快速排序
    快速排序的基本思想是通过一个划分操作,将待排序的数组分为两个部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再递归地对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
    步骤如下:
    选择基准值(Pivot):从数组中选择一个元素作为基准值,选择方法有多种,如选择第一个元素、最后一个元素、中位数等。
    分区操作(Partitioning):重新排列数组,比基准值小的元素放在基准值的前面,比基准值大的元素放在基准值的后面。分区结束后,基准值所处的位置就是其最终排序后的位置。
    递归排序:递归地将基准值前后的两部分数组进行排序。
    快速排序的平均时间复杂度为O(n log n),但最坏情况下的时间复杂度为O(n^2)。
  • 归并排序
    归并排序的基本思想是将待排序的数组分成若干个子序列,先让每个子序列有序,再让子序列段间有序。归并排序采用了经典的分治策略,分为“分”和“治”两个过程。
    步骤如下:
    分:将数组从中间分成前后两部分,然后递归地对这两部分分别进行归并排序。
    治:将两个排序好的子序列合并成一个最终的排序序列。
    归并过程需要额外的空间来合并两个有序数组,这是归并排序的一个特点。
    归并排序的时间复杂度始终为O(n log n),它比快速排序的最坏情况要好,但是由于其需要额外的存储空间,空间复杂度为O(n)。

链表适合归并排序而不是快速排序的原因主要有以下几点:

内存访问模式:快速排序的效率主要来源于引用的局部性,计算机硬件在这里得到了优化,因此访问彼此相邻的内存位置往往比访问分散在内存中的内存位置更快。然而,链表单元格经常分散在内存中,所以访问相邻的链表单元格没有局部性的好处。因此,快速排序的一个大的性能优势在链表排序中就被削弱了。
空间复杂度:快速排序是原地排序,不需要创建任何辅助数组来保存临时值。这在数组排序中是一个巨大的优势,因为分配和释放辅助数组所需的时间是显而易见的。然而,对于链表来说,归并排序的链表算法并不需要任何额外的辅助存储空间。
排序效率:归并排序往往更快,因为它更平均地将列表一分为二,并且在每次迭代中进行归并比执行分区步骤所做的工作更少。
参考:点击

我不太理解为什么快排依赖局部性原理,我更偏向于的解答:

快速排序和归并排序的操作特性不同:
快速排序:快速排序涉及大量的元素交换(如果是数组)和需要随机访问元素以进行分区操作。在链表上执行这些操作相对低效,因为每次访问或找到一个特定的节点都需要从头开始遍历链表。
归并排序:归并排序主要是分治和合并操作,这些操作对链表来说非常自然和高效。分治操作通过递归将链表分成两半,不需要额外空间;合并两个有序链表也非常高效,只需要调整节点的指针。归并排序不需要随机访问链表节点,这使得它在链表上的实现比快速排序更为适合。

这题有待商榷。
链表两种排序代码
数组两种排序代码

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

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

相关文章

cocos 如何使用九宫格图片,以及在微信小程序上失效。

1.在图片下方,点击edit。 2.拖动线条,使四角不被拉伸。 3.使用。 其他 在微信小程序上失效,需要将packable合图功能取消掉。

IOS Swift 从入门到精通: 类和继承

文章目录 创建自己的类类继承覆盖方法final 类复制对象反初始化器可变性总结 创建自己的类 类与结构类似,因为它们允许您创建具有属性和方法的新类型,但它们有五个重要的区别,我将逐一介绍每个区别。 类和结构体之间的第一个区别是&#xf…

速度测试分析软件MySpeed

什么是 MySpeed ? MySpeed 是一款速度测试分析软件,可记录您长达 30 天的互联网速度。使用 MySpeed,您可以轻松生成有关速度、ping 等的清晰统计数据。配置运行状况检查,以便在出现错误或停机时通过 Gotify、Discord、WhatsApp 或…

海报设计师的福音来了,微软联合清华北大提出Glyph-ByT5-v2,可支持多国语言图文海报生成,效果惊艳!

清华&北大&微软&利物浦大学联合提出Glyph-ByT5-v2这款工具支持多语言图文生成,包括英语、中文、日文、韩文、法文、德文、西班牙文、意大利文、葡萄牙文和俄文。 以下分别展示中、英、日、韩图文的视觉文本结果一起带大家感受一下。 相关链接 论文地址…

Linux源码阅读笔记03-调度器及CFS调度器

调度器 调度器:Linux内核中用来安排调度进程(一段程序的执行过程)执行的模块成为调度器,他可以切换进程状态。比如:执行、可中断睡眠、不可中断睡眠、退出、暂停等; 调度器的主要职责:选择某些…

gbase8s关于客户端和数据库连接的方式和应用建立连接的简单线索分工

应用和数据库的连接分为本地连接和远程连接,当应用程序和数据库在同一台服务器上为本地连接,不在一台服务器上为远程连接 1. 本地连接 本地连接三种方式: 通过共享内存消息系统:应用和数据库在同一台服务器上,应用程…

判别式模型 vs 生成式模型

判别式模型 vs 生成式模型 在机器学习中,判别式模型和生成式模型是两种重要的模型类型。让我们用简单的语言来理解它们的原理、特点和应用场景。 判别式模型(Discriminative Model) 什么是判别式模型? 判别式模型专注于区分类别…

C语言 | Leetcode C语言题解之第165题比较版本号

题目&#xff1a; 题解&#xff1a; int compareVersion(char * version1, char * version2){int len1 strlen(version1);int len2 strlen(version2);int i 0;int j 0;while (i < len1 || j < len2) {int num1 0;int num2 0;while (i < len1 && versio…

C#实现音乐在线播放和下载——Windows程序设计作业3

1. 作业内容 编写一个C#程序&#xff0c;在作业二实现的本地播放功能的基础上&#xff0c;新增在线播放和在线下载功能&#xff0c;作业二博客地址&#xff1a;C#实现简单音乐文件解析播放——Windows程序设计作业2 2. 架构选择 考虑到需求中的界面友好和跨版本兼容性&#xf…

【ThreeJS】Threejs +Vue3 开发基础

目前流行的前端3D框架以以Three.js、Babylon.js、A-Frame和ThingJS为例&#xff1a; 1.Three.js 功能&#xff1a; 提供了大量的3D功能&#xff0c;包括基本几何形状、材质、灯光、动画、特效等。 易用性&#xff1a; 功能强大且易于使用&#xff0c;抽象了复杂的底层细节&…

题解:P3569 [POI2014] KAR-Cards

题意 有 n n n 个元素&#xff0c;第 i i i 个元素有两个权值 a i a_i ai​ 和 b i b_i bi​&#xff1b;有 m m m 次操作&#xff0c;每次操作会交换两个元素的位置&#xff0c;且都需要回答&#xff1a;是否存在一种方案&#xff0c;使得每个元素各选择一个权值后&#…

STM32读取芯片内部温度

基于stm32f103cbt6这款芯片&#xff0c;原理部分请参考其他文章&#xff0c;此文章为快速上手得到结果&#xff0c;以结果为导向。 1.基础配置 打开stm32cubemx只需要勾选中 ADC1 Temperature Sensor Channel 2.代码分析 /** 函数名&#xff1a;float GetAdcAnlogValue(voi…

120.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-邮件发送功能的封装

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

【前端面试】理解 JavaScript 中的 Set 和 Map 对象

目录 一、Set 对象1. 基本操作2. 遍历操作3. Set 的特性4. 与数组的互操作 二、Map 对象1. 基本操作2. 遍历操作3. Map 的特性4. 与对象的比较 三、算法题及题解题目&#xff1a;找出数组中的重复元素题目&#xff1a;数组去重题目&#xff1a;统计字符串中每个字符出现的次数题…

简单的 Python Web 应用 Docker 化案例

简单的 Python Web 应用 Docker 化案例 在这个案例中&#xff0c;我们将展示如何使用 Docker 容器化一个简单的 Python Web 应用。我们将创建一个基于 Flask 框架的 Hello World 应用&#xff0c;并使用 Docker 和 Docker Compose 管理容器化环境。 1. 创建 Python Web 应用 …

STM32项目分享:家庭环境监测系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.…

集群初始配置

假设已经有三台或多台 Linux&#xff0c;可以是虚拟机或真实设备。如果希望使用这些 Linux 组成一个集群&#xff0c;并在上面运行一些分布式系统&#xff0c;可能需要如下操作。 1 设置静态IP 输入命令route -n打印路由表&#xff0c;可以查看网关地址。图形界面操作&#x…

跌倒识别:守护公共安全的AI技术应用场景-免费API调用

随着科技的不断进步&#xff0c;人工智能在各个领域的应用日益广泛&#xff0c;其中在公共安全领域&#xff0c;智能跌倒识别系统正逐渐成为守护人们安全的重要工具。本文将分享智能跌倒识别系统在不同场景下的应用及其重要性。 产品在线体验地址-API调用或本地化部署 AI算法模…

【Golang - 90天从新手到大师】Day02 - 基本语法

系列文章合集 Golang - 90天从新手到大师 变量和常量 变量声明 标准声明 var name type批量声明 var (name1 type1name2 type2... )声明时初始化 var name type value类型推导 var name value短变量声明 name : value匿名声明 在使用多重赋值时&#xff0c;如果想要…

【第一性原理】邓巴数字

这里写自定义目录标题 什么是邓巴数字邓巴数背后的科学历史上各个组织的人数与邓巴数字的关系在人类进化中的意义现代社会中邓巴数字的体现邓巴数字的意义其他与沟通相关的数据注意事项结论参考 罗宾邓巴教授生于1947年&#xff0c;进化心理学家&#xff0c;牛津大学教授&#…