3.5.4、查找和排序算法-排序算法下

news2024/11/15 22:36:24

快速排序

快速排序的基本思想是:通过一趟排序将待排的序列划分为独立的两个部分,其中一部分序列的元素均不大于另一部分记录的关键字,然后再分别对这两部分序列继续进行快速排序,以达到整个序列有序。

大致步骤如下:

  • 首先设置一个分界值也就是基准值又是也称为监视哨,通过该分界值将数据分割成两部分。
  • 将大于或等于分界值的数据集中到右边,小于分界值的数据集中到左边。一趟排序过后,左边部分中各个数据元素都小于分界值,而右边部分中各数据元素都大于或等于分界值,且右边部分个数据元素皆大于左边所有数据元素。
  • 然后,左边和右边的数据可以看成两组不同的部分,重复上述1和2步骤,当左右两部分都有序时,整个数据就完成了排序。

首先设置三个参数,first指向区间左端,last指向区间右端,key为当前的分界值。从待排序的数据元素中选取一个通常为第一个作为基准值元素(key)key=num[o],设置双指针first指向区间左端,last指向区间右端;

key首先与num[last]进行比较,如果num[last]<key,则num[[first]=num[last]将这个比key小的数放到左边去,如果num[last]>=key则–last,再拿num[last]与key进行比较,直到num[last<key交换元素为止。

num[last<key交换元素后,转向左边部分,用num[first]与key进行比较,如果num[first]<key,则++first,然后继续进行t比较,直至num[[first]>=key,则num[last]=num[[first]。
重复这个操作
在这里插入图片描述
第一轮排完后,23左侧的数据比23小。23右侧的数据比23大。然后将23左侧的数据进行快排,右侧的数据也进行快排
第一趟的完整示例图:
在这里插入图片描述
第一趟排序结束,得到[2,11,15,20,9,5]23[56,45,35]然后对左右子数列进行同样的操作。
2[11,15,20,9,5]23[35,45]56
2[5,9]11[20,15]23354556
25911152023354556
完成从小到大的排序
在这里插入图片描述

归并排序

非常浪费空间
归并排序是建立在归并操作上的一种有效、稳定的排序算法,该算法采用非常经典的分治法(分治法可以通俗的解释为:把一片领土分解,分解为若干块小部分,然后一块块地占领征服,被分解的可以是不同的政治派别或是其他什么,然后让他们彼此异化),归并排序的思路很简单,速度呢,也仅次于快速排序,接下来我们详细的看看归并排序的过程。

基本思路:

  • 第一步:将序列中待排序数字分为若干组,每N个数字分为一组。二路归并就是两个数字为一组
  • 第二步:把每个组里的元素进行排序,然后将若干组两两合并,保证合并的组都是有序的。
  • 第三步:重复第二步的操作,直到剩下最后一组即为有序数列。

一般归并排序都是用来合并多个线性表的,对单列数据,二路归并排序可以对元素进行两两合并,示例如下:
在这里插入图片描述
对第三次归并,将52与28比较,28小,放入新表头,52再与33比较,33放入新表,52再与72比较,52放入新表,57再与72比较,57放入新表…

基数排序

在这里插入图片描述
由上图可知,基数排序是基于多个关键字来进行多轮排序的,本质也是将问题细分,如上右图例子,分别按个位、十位、百位的大小作为关键字进行了三轮排序,最终得出结果。

总结

记住下面的表格,选择题70%-80%能拿分
在这里插入图片描述

1)冒泡排序,选择排序,插入排序:两层嵌套循环就能完成。所以平均时间复杂度和最坏情况都是O(n2)。插入排序和冒泡排序在几乎有序的的情况下,效率能大幅度提升,最好的情况是O(n)。都是只涉及两两元素进行交换,所以只要申请一个临时空间就够了即空间复杂度为O(1),而且不需要额外申请空间
2)基数排序:是根据元素个位、十位、百位、千位…位数进行申请空间,所以k就是位数所申请的数量。平均时间复杂度,最坏和最好情况都是O(n*k)。空间复杂度是O(n+k)。需要额外申请内存空间
3)希尔排序,归并排序,快速排序,推排序:平均时间复杂度和最好情况都是O(n log n)。最坏的情况:快速排序在几乎有序的情况下是最坏的情况O(n2)。空间复杂度:希尔排序和推排序只申请了一个内存,归并排序需要申请很多个单独的空间存放两两比较之后的元素所存的位置,空间复杂度是最高的

前面已经介绍过,稳定性就是相等的两个元素的相对位置在排序前后保持不变。

空间复杂度中,大部分排序都是比较交换,无需多余空间,快速排序则是需要存储每次的基准值,归并排序需要一个新表,基数排序需要新表,还需要存储关键字的空间。

时间复杂度中,与堆、树、二分有关的算法都是nlogn,直接的算法都是nn(包含了两重嵌套循环。内循环会随着输入规模的增加而执行n次,而外循环也会执行n次。因此,总的操作次数将是n乘以n,导致时间复杂度为O(m2),分析算法原理都可以轻易得出上述结论。

练习题

【2020】对个数排序,最坏情况下时间复杂度最低的算法是()排序算法。
(A)插入
B)冒泡
©归并
(D)快速

答案:C

【2020】根据渐进分析,表达式序列:n4,logn,2n,1000n,n2/3,n!从低到高排序
为()。
(A)logn,1000n,n213,n4,n!,2n
(B)n23,1000n,logn,n4,n,2n
©logn,1000n,n213,2n,n4,n!
(D)logn,n213,1000n,n4,27,n!

答案D
常量*n:通常常量可以去掉,因为n足够大的情况下常量就没有什么含义了。

【2021】对数组A=(2,8,7,1,3,5,6,4)构建大顶堆为()
(A)(1,2,3,4,5,6,7,8)
(B)(1,2,5,4,3,7,6,8)
©(8,4,7,2,3,5,6,1)
(D)(8,7,6,5,4,3,2,1)

答案C,构建大顶堆不是完成排序
在这里插入图片描述

【2021】对于一个初始无序的关键字序列,在下面的排序方法中,()第一趟排序结束后,一定能将序列中的某个元素在最终有序序列中的位置确定下来。
①直接插入排序②冒泡排序③简单选择排序④堆排序⑤快速排序⑥归并排序
(A)①②③⑥
(B)①②③⑤⑥
©②③④⑤
(D)③④⑤⑥

答案C

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

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

相关文章

2024西安铁一中集训DAY27 ---- 模拟赛((bfs,dp) + 整体二分 + 线段树合并 + (扫描线 + 线段树))

文章目录 前言时间安排及成绩题解A. 倒水&#xff08;bfs dp&#xff09;B. 让他们连通&#xff08;整体二分 按秩合并并查集 / kruskal重构树&#xff09;C. 通信网络&#xff08;线段树合并 二分&#xff09;D. 3SUM&#xff08;扫描线 线段树&#xff09; 前言 T1没做出…

6万字,让你轻松上手的大模型 LangChain 框架

本文为我学习 LangChain 时对官方文档以及一系列资料进行一些总结&#xff5e;覆盖对Langchain的核心六大模块的理解与核心使用方法&#xff0c;全文篇幅较长&#xff0c;共计50000字&#xff0c;可先码住辅助用于学习Langchain。** 一、Langchain是什么&#xff1f; 如今各类…

FPGA实现LCD12864控制

目录 注意&#xff01; a) 本工程采用野火征途PRO开发板&#xff0c;外接LCD12864部件进行测试。 b) 有偿提供代码&#xff01;&#xff01;&#xff01;可以定制功能&#xff01;&#xff01;&#xff01;有需要私信&#xff01;&#xff01;&#xff01; c) 本文测试采用…

操作系统02

文章目录 Linux 内核 vs Windows 内核内核Linux 的设计MultiTaskSMPELFMonolithic Kernel **Windows 设计** 内存管理虚拟内存内存分段内存分页多级页表TLB 段页式内存管理Linux 内存布局内存分配的过程是怎样的&#xff1f;哪些内存可以被回收&#xff1f;回收内存带来的性能影…

中国RoHS新增4项邻苯二甲酸酯管控,电子电气产品GB/T 26572-2011测试

中国RoHS 新增4项邻苯类物质 01 资讯内容 2024年6月29日&#xff0c;国家市场监督管理总局&#xff08;国家标准化管理委员会&#xff09;发布了2024年第14号中国国家标准公告&#xff0c;批准了109项国家标准和4项国家标准修改单。 其中&#xff0c;中国RoHS配套的标准GB/T 2…

人工智能和机器学习2 (复旦大学计算机科学与技术实践工作站)python调用百度AI、获取token,并利用opencv绘制分析图,做简单判断

前言 在现代科技的推动下&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;逐渐成为各行各业的重要工具。百度AI开放平台作为全球领先的人工智能服务平台&#xff0c;为开发者提供了包括语音、图像、自然语言处理&#xff08;NLP&#xff…

Python常用内置库介绍

Python作为一门强大且易学的编程语言&#xff0c;内置了许多功能强大的库&#xff0c;让开发者能够更加便捷地完成各种任务。本文中&#xff0c;我将详细介绍Python中常用的内置库。 math&#xff1a;提供数学函数&#xff0c;如三角函数、对数函数等。 示例&#xff1a;计算平…

Pycharm conda 虚拟环境添加失败---windows

版本&#xff1a; conda&#xff1a;23.5.2 pycharm:2023.1.3 解决方案&#xff1a; 已验证&#xff1a; 使用系统解释器选择python.exe进行本地添加&#xff08;ps:该方式不会显示conda名称&#xff09; conda路径使用conda info查询 还有一个是在查找解决方法的时候看到比…

05-ArcGIS For JavaScript-RenderNode后处理效果

05-ArcGIS For JavaScript-RenderNode后处理效果 综述代码解析代码实现颜色混合完整代码结果高亮处理完整代码结果 结语 综述 ArcGIS For JavaScript 4.9版本提供了很多优秀的功能&#xff0c;其中提供了RenderNode类&#xff0c;既可以支持第三方渲染引擎的植入&#xff0c;例…

PowerShell报错 about_Execution_Policies 解决方法

在用express创建项目中显示项目创建失败&#xff0c;报错如图所示&#xff0c;显示无法加载文件&#xff0c;按照提示地址https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies看到页面显示是PowerShell执行策略的问题。有问题评论区留言&#xff0c;…

前端构建工具Vite

前端主流框架Vue大家应该都耳熟能详&#xff0c;很多的公司和项目都在使用&#xff0c;以前前端构建工具用的比较多的是webpack&#xff0c;后面渐渐地出现了Vite&#xff0c;它受到大家的喜爱和使用&#xff0c;那大家是否也很想知道它的由来以及优势&#xff0c;为什么越来越…

用户提交订单业务

文章目录 概要整体架构流程技术细节小结 概要 我们通常指的是在电子商务或在线零售环境中&#xff0c;顾客通过互联网完成商品或服务购买的过程。随着互联网技术的发展和普及&#xff0c;越来越多的消费者选择在线购物&#xff0c;这不仅因为其便捷性&#xff0c;还因为它提供…

Linux网络-小结

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注我&#xff0c;我尽量把自己会的都分享给大家&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux服务器作为一个常用的网络服务器&#xff0c;主要的作用就是向客户端提供网络…

MySQL基础练习题14-产品销售分析1

题目&#xff1a;获取 Sales 表中所有 sale_id 对应的 product_name 以及该产品的所有 year 和 price 。 准备数据 分析数据 题目&#xff1a;获取 Sales 表中所有 sale_id 对应的 product_name 以及该产品的所有 year 和 price 。 准备数据 ## 创建库 create database db;…

实战:深入了解JDBC和分享JDBCUtil

Java 数据库连接 (JDBC) 是一个功能强大的 API&#xff0c;它弥补了 Java 应用程序与关系数据库之间的差距。通过利用 JDBC&#xff0c;您可以无缝地与数据库交互以存储、检索和操作数据。但是&#xff0c;要有效使用 JDBC&#xff0c;需要遵循最佳实践&#xff0c;以确保代码的…

GitHub Revert Merge Commit的现象观察和对PR的思考

文章目录 前言Pull Request 为什么会是这样&#xff1f;Pull Request Branch的差异 ?Two Dot Diff和Three Dot Diff 老生常谈&#xff1a; Merge 和 Rebasegit mergegit rebase Revert Main分支中的一个Merge Commit现象描述解决方案: Revert Feature分支中的一个Merge Commi…

RocketMQ入门到精通

RocketMQ入门到精通 一、介绍1.对比2.基础概念 二、环境搭建1.下载rocket2.新增系统变量&#xff1a;ROCKETMQ_HOME3.启动命名服务 nameserver4.启动broker服务器5.安装可视面板6.手动创建Topic7.手动创建消费者组 三、使用Springboot实现消息的收发1.引入jar包2.配置yml文件3.…

【Python机器学习】朴素贝叶斯——使用朴素贝叶斯过滤垃圾邮件

使用朴素贝叶斯解决一些现实生活中的问题时&#xff0c;需要先从文本内容中得到字符串列表&#xff0c;然后生成词向量。 使用朴素贝叶斯对电子邮件进行分类的过程&#xff1a; 1、收集数据&#xff1a;提供文本文件 2、准备数据&#xff1a;将文本文件解析成词条向量 3、分析…

推荐5款好用的将pdf翻译成中文的工具。

像word&#xff0c;PPT,Excel等这些文档如果要翻译的话&#xff0c;即使没有合适的工具也可以复制粘贴内容。可PDF有的时候是不可以编辑的&#xff0c;很难用这种方法实现翻译。但是这5款翻译工具就可以做到直接将PDF文件进行翻译。 1、365pdf在线翻译 直达&#xff1a;https:…