当前位置: 首页 > news >正文

面试题:排序算法的稳定性?(文末有福利)

回归面试题!

回答重点

  • 稳定的排序算法:冒泡排序、插入排序、归并排序、计数排序。

  • 不稳定的排序算法:选择排序、快速排序、堆排序、希尔排序。

扩展知识

1)冒泡排序(Bubble Sort)

原理:
冒泡排序是一种简单的排序算法。它通过多次遍历数组,依次比较相邻的两个元素,如果前者比后者大,就交换它们的位置。这样,最大的元素会像气泡一样逐渐"冒泡"到数组的末尾。这个过程会重复多次,直到没有元素需要交换。

时间复杂度:

  • 最优时间复杂度:O(n) (当数组已排序时)

  • 平均时间复杂度:O(n²)

  • 最坏时间复杂度:O(n²)

空间复杂度:

  • O(1) (原地排序)

特点:

  • 稳定

  • 简单易懂,但效率较低,不适合大数据量的排序。

2)插入排序(Insertion Sort)

原理:
插入排序通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入。类似于打牌时整理手中的牌。

时间复杂度:

  • 最优时间复杂度:O(n) (当数组已排序时)

  • 平均时间复杂度:O(n²)

  • 最坏时间复杂度:O(n²)

空间复杂度:

  • O(1) (原地排序)

特点:

  • 稳定

  • 对于小规模数据或基本有序的数据,效率较高。

3)选择排序(Selection Sort)

原理:
选择排序每次从未排序的序列中找到最小(或最大)的元素,放到已排序序列的末尾,直到所有元素排序完毕。

时间复杂度:

  • 最优时间复杂度:O(n²)

  • 平均时间复杂度:O(n²)

  • 最坏时间复杂度:O(n²)

空间复杂度:

  • O(1) (原地排序)

特点:

  • 不稳定

  • 简单但效率低,通常不用于大规模数据排序。

4)快速排序(Quick Sort)

原理:
快速排序是一种分治算法。通过选择一个"基准"元素,将数组分为两部分,一部分比基准小,一部分比基准大。然后对这两部分分别进行递归排序。

时间复杂度:

  • 最优时间复杂度:O(n log n)

  • 平均时间复杂度:O(n log n)

  • 最坏时间复杂度:O(n²) (当选的基准值不合适时)

空间复杂度:

  • O(log n) (递归栈的空间)

特点:

  • 不稳定

  • 是实际应用中最常用的排序算法之一,性能通常较好。

5)归并排序(Merge Sort)

原理:
归并排序是一种典型的分治算法。将数组分成两个子数组,对每个子数组分别排序,然后将排好序的子数组合并。

时间复杂度:

  • 最优时间复杂度:O(n log n)

  • 平均时间复杂度:O(n log n)

  • 最坏时间复杂度:O(n log n)

空间复杂度:

  • O(n) (需要额外的数组存放合并结果)

特点:

  • 稳定

  • 适合处理大规模数据和链表排序,但空间开销较大。

6)堆排序(Heap Sort)

原理:
堆排序利用堆这种数据结构来排序。先将数组构建成最大堆,然后将堆顶元素(最大值)与堆的最后一个元素交换,减小堆的范围,并重新调整堆,直到排序完成。

时间复杂度:

  • 最优时间复杂度:O(n log n)

  • 平均时间复杂度:O(n log n)

  • 最坏时间复杂度:O(n log n)

空间复杂度:

  • O(1) (原地排序)

特点:

  • 不稳定

  • 在实际中较少单独使用,常用于一些需要优先队列的场景。

7)希尔排序(Shell Sort)

原理:
希尔排序是插入排序的一种改进版。它通过设置一个初始的步长,将数组按步长分为多个子序列,对每个子序列进行插入排序,然后逐步缩小步长,直到步长为1。

时间复杂度:

  • 最优时间复杂度:O(n log n)(根据步长序列的选择)

  • 平均时间复杂度:O(n log² n)

  • 最坏时间复杂度:O(n log² n)

空间复杂度:

  • O(1) (原地排序)

特点:

  • 不稳定

  • 相对简单,且在大多数实际情况下效率较高,但最坏情况难以分析。

8)计数排序(Counting Sort)

原理:
计数排序适用于数据范围有限的情况。通过计数数组记录每个元素出现的次数,然后根据计数数组构建排好序的数组。

时间复杂度:

  • 最优时间复杂度:O(n + k)

  • 平均时间复杂度:O(n + k)

  • 最坏时间复杂度:O(n + k) (k为数据范围)

空间复杂度:

  • O(n + k) (需要额外的计数数组)

特点:

  • 稳定

  • 非比较排序,适用于范围较小的整数排序,空间复杂度较高。

福利:

私聊作者或者添加下方联系领取Java高频面试集pdf

相关文章:

面试题:排序算法的稳定性?(文末有福利)

回归面试题! 回答重点 稳定的排序算法:冒泡排序、插入排序、归并排序、计数排序。 不稳定的排序算法:选择排序、快速排序、堆排序、希尔排序。 扩展知识 1)冒泡排序(Bubble Sort) 原理: 冒…...

在Jdk1.8中Collectors和Comparator使用场景

在Jdk1.8中Collectors和Comparator使用场景 ​Collectors​ 和 Comparator​ 是 Java 8 引入的两个非常重要的类,它们在处理集合和流(Streams)时起着重要的作用。以下是这两个类的使用场景以及它们的典型用法。 1. Collectors ​Collector…...

linux-性能优化命令

top 我们先来说说top命令用法,这个命令对于我们监控linux性能是至关重要的,我们先来看看展示结果。 top - 15:20:23 up 10 min, 2 users, load average: 0.39, 0.53, 0.35 Tasks: 217 total, 1 running, 216 sleeping, 0 stopped, 0 zombie %C…...

基于MT79815G CPE 板子上挂usb3.0的5G 模块,WIFI能跑多少速度呢

关于MT79815G CPE 板子上挂usb3.0的5G 模块,WIFI能跑多少速度的问题,我们以启明智显 ZX7981P智能无线接入型路由器(CPE)挂广合通5G模组为例说明: 一般来说,用 ZX7981P,通过软加速,U…...

R包compareGroups详细用法

compareGroups compareGroups 是一个功能强大的 R 包,专为数据质量控制、数据探索和生成用于出版的单变量或双变量表格而设计。它能够创建各种格式的报表,如纯文本、HTML、LaTeX、PDF、Word 或 Excel 格式,并显示统计数据(均值、…...

如何选择高品质SD卡

如何选择高品质SD卡 SD卡(Secure Digital Memory Card)是一种广泛使用的存储器件,因其快速的数据传输速度、可热插拔的特性以及较大的存储容量,广泛应用于各种场景,例如在便携式设备如智能手机、平板电脑、运动相机等…...

C++学习:模拟priority_queue

一&#xff1a;仿函数 开始模拟前咱先了解一下仿函数。有了它&#xff0c;我们就可以自己传个代码让优先级队列升序还是降序&#xff0c;自己模拟时也不用在需要升序降序时改代码。这是个很有用的东西。 不写模版也可以&#xff0c;但模版能用在更多地方嘛 template <class …...

同程旅行对标拼多多:“形似神不似”

文&#xff1a;互联网江湖 作者&#xff1a;刘致呈 业绩好&#xff0c;并不意味着同程旅行就能高枕无忧了。 最近&#xff0c;媒体曝出&#xff1a;有用户在同程旅行APP上预订酒店&#xff0c;在预订成功并付款后&#xff0c;结果第二天却被酒店告知&#xff0c;没有查到相关…...

HOJ网站开启https访问 申请免费SSL证书 部署证书详细操作指南

https://console.cloud.tencent.com/ 腾讯云用户 登录控制台 右上角搜SSL 点击 SSL证书 进入链接 点申请 免费证书 有效期3个月 &#xff08;以后每三个月申请一次证书 上传&#xff09; 如果是腾讯云申请的域名 选 自动DNS验证 自动添加验证记录 如果是其他平台申请域…...

程序设计基础I-实验4 循环结构之for语句

7-1 sdut-C语言实验-AB for Input-Output Practice (Ⅳ) Your task is to Calculate a b. 输入格式: Your task is to Calculate a b. 输出格式: For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of out…...

深入工作流调度的内核

在大数据时代&#xff0c;工作流任务调度系统成为了数据处理和业务流程管理的核心组件&#xff0c;在大数据平台的构建和开发过程中尤为重要。随着数据量的激增和业务需求的多样化&#xff0c;合理的任务调度不仅能够提高资源利用率&#xff0c;还能保证业务流程的稳定和高效运…...

vue3中动态引入组件并渲染组件

在开发中 有时会在打包或者各种可能的情况下 报错或警告提示 模块化打包的问题&#xff0c; 我们需要动态引入组件并渲染组件时&#xff0c;可以使用import引入 如下举例 import { ref, markRaw } from vue const childrenComponent ref(); onMounted(() > {//举例引入一个…...

【艾思科蓝】网络安全的隐秘战场:构筑数字世界的铜墙铁壁

第七届人文教育与社会科学国际学术会议&#xff08;ICHESS 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 一、网络安全&#xff1a;数字时代的双刃剑 1.1 网络安全的定义与重要性 1.2 网络安全威胁的多元化…...

将图片资源保存到服务器的盘符中

服务类 系统盘符&#xff1a;file-path.disk&#xff08;可能会变&#xff0c;配置配置文件dev中&#xff09;文件根路径&#xff1a;file-path.root-path&#xff08;可能会变&#xff0c;配置配置文件dev中&#xff09;http协议的Nginx的映射前缀&#xff1a;PrefixConstant.…...

数学建模练习小题目

题目A 有三名商人各带一名仆人过河&#xff0c;船最多能载两人。在河的任何一岸&#xff0c;若仆人数超 过商人数&#xff0c;仆人会杀商人越货。如何乘船由商人决定&#xff0c;问是否有安全过河方案&#xff0c;若有&#xff0c;最少需要几步? 定义变量 商人和仆人的状态…...

不可错过的10款文件加密软件,企业电脑加密文件哪个软件好用

在信息安全日益重要的今天&#xff0c;企业和个人都需要可靠的文件加密软件来保护敏感数据。以下是2024年不可错过的10款文件加密软件&#xff0c;它们以强大的加密功能和易用性而闻名。 1.安秉加密软件 安秉加密软件是一款专为企业设计的信息安全管理工具&#xff0c;采用驱动…...

常用卫星学习

文章目录 Landsat-8 Landsat-8 由一台操作陆地成像仪 &#xff08;OLI&#xff09; 和一台热红外传感器 &#xff08;TIRS&#xff09;的卫星&#xff0c;OLI 提供 9 个波段&#xff0c;覆盖 0.43–2.29 μm 的波长&#xff0c;其中全色波段&#xff08;一般指0.5μm到0.75μm左…...

音视频入门基础:FLV专题(3)——FLV header简介

一、引言 本文对FLV格式的FLV header进行简介&#xff0c;FLV文件的开头就是FLV header。 进行简介之前&#xff0c;请各位先从《音视频入门基础&#xff1a;FLV专题&#xff08;1&#xff09;——FLV官方文档下载》下载FLV的官方文档《video_file_format_spec_v10_1.pdf》和…...

python中数据处理库,机器学习库以及自动化与爬虫

Python 在数据处理、机器学习和自动化任务方面非常强大&#xff0c;它的库生态系统几乎涵盖了所有相关领域。我们将从以下几个部分来介绍 Python 中最常用的库&#xff1a; 数据处理库&#xff1a;Pandas、NumPy 等机器学习库&#xff1a;Scikit-learn、TensorFlow、Keras 等自…...

2024最新测评:低代码平台在企业复杂应用场景的适用性如何?

低代码平台种类多&#xff0c;不好一概而论。但最近有做部分低代码平台的测评&#xff0c;供大家参考。 一个月前接到老板紧急任务&#xff1a;调研有没有一款低代码平台能开发我司的软件场景。我司是一家快速发展中的制造业企业&#xff0c;业务遍布全国&#xff0c;需要一个…...

URL中 / 作为字符串,而不是路径。

在Harbor中&#xff0c;仓库路径是二级&#xff0c;有时候在打镜像的时候&#xff0c;会把 / 作为字符串打进去&#xff0c;URL访问的时候有可能就当路径了。 解决办法&#xff1a;/ 转义 %252F...

el-input只能输入指定范围的数字

el-input只能输入指定范围的数字 需求&#xff1a;el-input只能输入指定范围的数字&#xff0c;不采用el-input-number组件。 几个关键点如下 v-model.numbertype"number"min"1" max"999999" 数字的范围 οninput"validity.valid ||(value…...

数据结构编程实践20讲(Python版)—01数组

本文目录 01 数组 arrayS1 说明S2 举例S3 问题&#xff1a;二维网格中的最小路径求解思路Python3程序 S4 问题&#xff1a;图像左右变换求解思路Python3程序 S5 问题&#xff1a;青蛙过河求解思路Python3程序 写在前面 数据结构是计算机科学中的一个重要概念&#xff0c;用于组…...

数据库实验2—1

10-1 查询重量在[40,65]之间的产品信息 本题目要求编写SQL语句&#xff0c; 检索出product表中所有符合40 < Weight < 65的记录。 提示&#xff1a;请使用SELECT语句作答。 表结构: CREATE TABLE product (Pid varchar(20), --商品编号PName varchar(50), --商品名称…...

现代前端框架实战指南:React、Vue.js、Angular核心概念与应用

随着互联网技术的发展&#xff0c;前端开发变得越来越复杂。 为了应对这些挑战&#xff0c;前端框架应运而生&#xff0c;它们提供了丰富的功能和工具&#xff0c;帮助开发者更高效地构建 和维护大型前端应用。前端框架是现代Web开发中不可或缺的一部分&#xff0c;它们提供了…...

MySQL --用户管理

文章目录 1.用户1.1用户信息1.2创建用户1.3删除用户1.4修改用户密码 2.数据库的权限2.1给用户授权2.2回收权限 如果我们只能使用root用户&#xff0c;这样存在安全隐患。这时&#xff0c;就需要使用MySQL的用户管理。 1.用户 1.1用户信息 MySQL中的用户&#xff0c;都存储在系…...

详解前驱图与PV操作

前驱图、PV操作 前驱图与PV操作的结合例子&#xff1a;两个进程的同步问题使用PV操作实现同步 前驱图的实际应用更复杂的场景示例示例1&#xff1a;前驱图与PV操作的结合1. 前驱图表示2. 使用信号量&#xff08;PV操作&#xff09;实现同步进程的执行逻辑&#xff1a; 3. 示例代…...

孩子来加拿大上学真的那么轻松吗?(上)

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 这是拼娃时代第三十一期节目&#xff0c;经过了一年的沉寂&#xff0c;拼娃时代在今年九月份终于恢复更新啦&#xff0c;JunJun老师也…...

【算法篇】二叉树类(1)(笔记)

目录 一、认识二叉树 1. 二叉树的种类 &#xff08;1&#xff09;满二叉树 &#xff08;2&#xff09;完全二叉树 &#xff08;3&#xff09;二叉搜索树 &#xff08;4&#xff09;平衡二叉搜索树 2. 二叉树的存储方式 3. 二叉树的遍历方式 4. 二叉树的定义 二、Leet…...

《C++无锁编程:解锁高性能并发的新境界》

在当今的软件开发领域&#xff0c;并发编程的重要性日益凸显。随着多核处理器的普及&#xff0c;开发者们越来越需要利用并发来提高程序的性能和响应速度。而 C作为一种强大的编程语言&#xff0c;提供了多种技术来实现无锁编程&#xff0c;从而在并发环境下获得更高的性能和更…...