面试题:推排序是一种稳定排序吗?

news/2024/11/29 3:49:58/

面试题:推排序是一种稳定排序吗?

在回答该问题前,首先需要了解什么是稳定排序。

稳定性就是指对于两个关键字相等的记录,它们在序列中的相对位置,在排序之前和排序之后没有发生改变。通俗地讲就是有两个关键字相等的数据A、B,排序前,A的位置是 i ,B的位置是 j,此时 i < j,则如果在排序后A的位置还是在B之前,那么称它是稳定的。

那么堆排序是一个稳定排序吗?

堆排序的稳定性分析

直接上答案堆排序并不是一个稳定排序。

堆排序的会将原始的数组转化成一个大顶堆或一个小顶堆,在输出堆顶后,此时需要维护堆,操作如下:

(1)堆顶与堆尾交换并删除堆尾,被删除的堆尾的元素就是输出过的元素

(2)把当前堆顶向下调整,直到满足构成堆的条件,重复(1)步骤

在堆顶与堆尾交换的时候两个相等的记录在序列中的相对位置就可能发生改变,这就影响其稳定性了。

下面看一个实际的例子, [5A,6,5B,7,8] ,A和B用于区分相同元素。

数组的原始的状态如下所示:

heapsort-stable1

首先调整下方的子树[6,7,8],将8和6的位置调换。

heapsort-stable2

接着调整下方的子树[5A,8,5B],将8和5A的位置调换。

heapsort-stable3

由于5A和8位置的调换,需要重新调整下方的子树[5A,7,6],将5A和7的位置调换。这个时候5A和5B的顺序就出现了一次乱序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nAwrraFV-1687091117468)(null)]

至此,第一轮排序完毕,将8和数组尾部元素6交换。

heapsort-stable5

接着调整顶部的子树[6,7,5B],将7和6的位置调换。

heapsort-stable6

这个时候第二轮排序已经结束,此时可以将7和数组尾部元素5A进行调整。

heapsort-stable7

接着调整顶部的子树[5A,6,5B],将6和5A的位置调换。

heapsort-stable8

这个时候第三轮排序已经结束,此时可以将6和数组尾部元素5B进行调整。

heapsort-stable9

剩下的元素已经满足了排序的要求,于是直接输出结果。

heapsort-stable10

至此[5A,6,5B,7,8] 排序为 [5B,5A,6,7,8]。可以看到5A和5B的关系发生了变化。

通过这个例子也证明了堆排序不是一个稳定排序。


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

相关文章

spring 反射,BigDecimal,自定义注解的使用(aop)

反射 利用反射调用它类中的属性和方法时&#xff0c;无视修饰符。 获取Class类的对象&#xff08;三种方式&#xff09; Class.forName(“全类名”) &#xff08;推荐使用&#xff09;类名.class对象.getClass() 反射获取构造方法Constructor<?>[] getConstructors()…

什么是流

流就是数据 流按照方向分为两种 第一种输入流跟输入流内存称之为输入流&#xff0c;也可以叫读取流。 第二种输出流将数据内存的数据写到数据中称之为输出流也叫做流入。 流按照流传输数据的内容来分有三种 分别是&#xff1a;字节流 字符流 字节流 传入二进制数据 字符流 传入…

“流片”一词来源

“流片”这个术语就是起源于磁带设备。磁带设备保存的是流式信息&#xff08;即必须从前到后顺序式地访问&#xff0c;不能像磁盘一样任意访问所有位置&#xff09;&#xff0c;所以吧GDS2文件交给厂家的过程叫作tapeout&#xff0c;中文就翻译成“流片”

烧芯片(流片)

原理图 → 设计PCB板&#xff08;芯片模块空出来&#xff0c;后续焊芯片&#xff09; → 代码&#xff08;Verilog HDL 或者VHDL 或者System Verilog&#xff09; → 编译&#xff08;工具&#xff1a;Quartus II 或者Xilinx&#xff09; → 逻辑电路图&#xff08;网表&#x…

脉冲神经网络SNN流片验证类脑芯片

面对国内芯片设计厂家&#xff0c;提供开发板验证业务&#xff0c;测试芯片性能&#xff0c;如某高校的SNN芯片。 AI边缘计算、视觉基础平台的研发&#xff0c;以FPGA、DSP、ARM为处理器&#xff0c;形态包括 VPX、CPCI-E&#xff0c;主要专注于边缘AI、嵌入式系统、3D视觉、异…

芯片流片(晶圆制造)工艺服务的流程。 细节详解连载

silicon service provides: Multiple foundries supportTechnology and foundry selectionTape-out service support, from GDS in to Job Deck ViewFoundry activities handling

什么是流片?芯片流片概念介绍

什么是流片&#xff1f;芯片流片概念介绍 一&#xff1a;什么是流片&#xff1f; 流片就是像流水线一样把芯片生产出来。 二&#xff1a;流片的目的。 为了测试。把刚设计好的芯片&#xff0c;生产几片出来测试测试。 三&#xff1a;什么是流片失败&#xff1f; 流片生产出来的…

新年芯事 | 龙芯中科通用SOC芯片龙芯2K2000流片成功

前言 2022年12月中&#xff0c;龙芯2K2000完成初步功能调试及性能测试&#xff0c;达到设计目标&#xff0c;已全面展开解决方案调试&#xff0c;近期将推出试用。 龙芯2K2000 ▋龙架构平台 龙芯2K2000芯片中集成两个LA364处理器核&#xff0c;2MB共享二级缓存&#xff0c;典型…