【排序算法——数据结构】

news2024/11/24 7:22:45

文章目录

  • 排序
    • 排序的基本概念
    • 1.插入排序
    • 2.希尔排序
    • 3.冒泡排序
    • 4.快速排序
    • 5.简单排序
    • 6.堆排序
    • 7.归并排序
    • 8.基数排序
    • 8.外部排序
    • 9.败者树
    • 10.置换选择排序

排序

排序的基本概念

排序,就是重新排列表中的元素,使表中的元素满足按关键字有序的过程
评价指标算法的稳定性,关键字相同的两个元素,在排序前后的相对位置不变,则称这个排序算法是稳定的,否则是不稳定的。
时间复杂度,空间复杂度
排序算法内部排序目一关注如何使算法的时间复 杂度和空间复杂度更低
外部排序还要关注如何使读/写磁盘次数更少

1.插入排序

在这里插入图片描述

折半查找找到应插入的位置,仅适用于顺序表
注意:一直到low> high时才停止折半查找。当mid所指元素等于当前元素时,应继续令low=mid+1,以保证"稳定性”。最终应将当前元素插入到low所指位置(即high+1)
在这里插入图片描述

在这里插入图片描述
比起直接插入排序,只减少了比较关键字的次数,时间复杂度仍是O(n2)

2.希尔排序

算法思想先追求表中元素部分有序,再逐渐逼近全局有序
先将待排序表分割成若干形如L([i,i+d.,i+2d…i+kd]的”特殊"子表,对各个子表分别进行直接插入排序。缩小增量d,重复上述过程,直到d= 1为止。
.
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.冒泡排序

算法思想从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i]) ,则交换它们,直到序列比较完。称这样过程为“- 趟”冒泡排序。最多只需n-1趟则交换它们,直到序列比较完.称这样过程为“-趟”冒泡排序.最多只需n-1趟排序。

每一趟排序都可以使一个元素移动到最终位置, 已经确定最终位置的元素在之后的处理中无需再次对比。

如果某一趟排序过程中未发生“交换”,则算法可以提前结束。

每次交换都要移动元素三次

在这里插入图片描述
在这里插入图片描述

4.快速排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.简单排序

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.堆排序

堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法。它利用了堆的性质:在一个最大堆(或最小堆)中,父节点的值总是大于等于(或小于等于)其子节点的值。

堆排序的基本思想是:

  1. 将待排序的序列构建成一个最大堆(或最小堆)。
  2. 取出堆顶元素(最大值或最小值),将其与堆的最后一个元素交换。
  3. 缩小堆的范围,对剩余的元素重新调整为最大堆(或最小堆)。
  4. 重复步骤 2 和步骤 3,直到堆的大小为 1。

堆排序的时间复杂度为 O(nlogn),其中 n 为要排序的元素个数。由于堆排序是一种原地排序算法,空间复杂度为 O(1),因此它在空间利用上相对较好。但是,堆排序是一种不稳定的排序算法,因为在构建堆的过程中会破坏相同元素之间的相对顺序。

堆排序的实现通常分为两个步骤:建堆和排序。建堆阶段的时间复杂度为 O(n),排序阶段的时间复杂度为 O(nlogn)。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

7.归并排序

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

8.基数排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

8.外部排序

外存与内存之间的数据交换
在这里插入图片描述
外部排序:
1.数据元素太多,无法- -次全部读入内存进行排序
2.若要进行k路归并排序,则需要在内存中分配k个输入缓冲区和1个输出缓冲区
3.步骤生成r个初始归并段(对L个记录进行内部排序,组成一个有序的初始归并段)
进行S趟k路归并, S=[logkr]- k越大, r越小,归并趟数越少,读写磁盘次数越少目
4.如何进行k路归并
把k个归并段的块读入k个输入缓冲区
用“归并排序”的方法从k个归并段中选出几个最小记录暂存到输出缓冲区中
每当一个输入缓冲区为空时,立即输入下一块待排数据
当输出缓冲区满时,写出外存
优化思路
多路归并
需要增加相应的输入缓冲区
每次从k个归并段中选一个最小元素需要 (k-1) 次关键字对比
采用多路归并可以减少归并趟数,从而减少磁盘I/O (读写)次数

减少初始归并段数量
若能增加初始归并段长度,则可减少初始归并段数量r
按照本节课介绍的方法生成的初始归并段,若共有N个记录,内存工作区可以容
纳L个记录,则初始归并段数量r=N/L

9.败者树

使用k路平衡归并策略,选出一个最小元素需要对比关键字(k-1) 次,导致内部.
归并所需时间增加-----可以用败者树解决!
败者树一可视为一 棵完全_ =叉树(多了一个头)。k个叶结点分别是当前参加比
什么是败者树
较的元素,非叶子结点用来记忆左右子树中的“失败者”,而让胜者往上继续进
行比较,-直到根结点

原理
每个叶子结点对应一个归并段
分支结点记录失败败者来自哪个归并段
根节点记录冠军来自哪个归并段
性能分析
对于k路归并,第一次构造败者树需要对比关键字k-1次
有了败者树,选出最小元素,只需对比关键字[log2 k]次

10.置换选择排序

若共有N个记录,内存工作区可以容纳L个记录,则初始归并段数量r=N/L-
可用“置换选择排序"进-步减少初始归并数量
设初始待排文件为FI,初始归并段输出文件为FO,内存工作区为WA, FO和WA
的初始状态为空,WA可容纳w个记录。置换选择算法的步骤如下
1.从FI输入w个记录到工作区WA
2.从WA中选出其中关键字取最小值的记录,记为MINIMAX记录
3.将MINIMAX记录输出到FO去
4.若FI不空,则从FI输入下一个记录到WA中
5.从WA中所有关键字比MINIMAX记录的关键字大的记录中选出最小关键字记
录,作为新的MINIMAX记录
6.重复3-5,直至在WA中选不出新的MINIMAX记录为止,由此得到一个初始归
并段,输出一个归并段的结束标志到FO中去
7.重复2-6,直至WA为空,由此得到全部初始归并段
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

数据库聚簇索引和非聚簇索引的区别

聚簇索引(Clustered Index)和非聚簇索引(Non-clustered Index)是数据库中两种不同的索引类型,它们的主要区别在于数据的存储方式和索引的结构: 数据存储方式: 聚簇索引:索引的叶子节…

【21-40】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【21-40】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用21、HTTPS是如何保证数据传输的安全,整体的流程是什么?(SSL是…

夜莺浏览日志、filebeat采集日志(四)

文章目录 一、elasticsearch二、filebeat三、日志分析 一、elasticsearch docker启动 docker run -d -p 9200:9200 -p 9300:9300 --restartalways -e ES_JAVA_OPTS"-Xms512m -Xmx512m" \ -e discovery.typesingle-node -e xpack.security.enabledtrue -e ELASTIC_P…

HSP_04章_扩展: 进制、位运算

文章目录 10. 扩展: 进制11. 位运算11.1 二进制在运算中的说明11.2 原码 反码 补码11.3位运算符11.3.1 ~按位取反11.3.2 &按位与11.3.3 ^按位异或11.3.4 |按位或11.3.5 << 左移11.3.6 >> 右移 10. 扩展: 进制 进制介绍 进制的转换 2.1 其他进制转十进制 二进…

投稿指南【NO.12_9】【极易投中】核心期刊投稿(现代电子技术)

近期有不少同学咨询投稿期刊的问题&#xff0c;大部分院校的研究生都有发学术论文的要求&#xff0c;少部分要求高的甚至需要SCI或者多篇核心期刊论文才可以毕业&#xff0c;但是核心期刊要求论文质量高且审稿周期长&#xff0c;所以本博客梳理一些计算机特别是人工智能相关的期…

通过pymysql读取数据库中表格并保存到excel(实用篇)

本篇文章是通过pymysql将本地数据库中的指定表格保存到excel的操作。 这里我们假设本地已经安装了对应的数据库管理工具&#xff0c;里面有一个指定的表格&#xff0c;现在通过python程序&#xff0c;通过调用pymysql进行读取并保存到excel中。 关于数据库管理工具是Navicat P…

vCenter 提示 Root user password expired 解决办法

vCenter root 密码过期告警 vCenter 一般部署为一台虚拟机&#xff0c;该 root 用户是 vCenter 虚拟机SSH登录的用户&#xff0c;以及 vcenter VAMI的登录用户&#xff0c;该密码默认过期时间为90天。 vCenter涉及多个登录界面&#xff0c;本次提示root密码过期的用户涉及后两…

搜索与图论——Dijkstra算法求最短路

最短路算法 稠密图与稀疏图 n为点数&#xff0c;m为边数。m远小于n的平方为稀疏图&#xff0c;m接近n的平方为稠密图。 稀疏图用邻接表存&#xff0c;稠密图用邻接矩阵存 朴素版dijkstra时间复杂度为O(n^2),对于稠密图可以ac&#xff0c;但遇到稀疏图时会TLE。 dijkstra函数实…

【leetcode】力扣简单题两数之和

题目 思路 代码实现 #include<iostream> #include<unordered_map>using namespace std;class Solution { public:vector<int> TwoNumber(const vector<int>& nums, int target){vector<int> number_vector;unordered_map<int, int> …

java数组与集合框架(一) -- 数据结构,数组

数据结构 概述 为什么要讲数据结构&#xff1f; 任何一个有志于从事IT领域的人员来说&#xff0c;数据结构&#xff08;Data Structure&#xff09;是一门和计算机硬件与软件都密切相关的学科&#xff0c;它的研究重点是在计算机的程序设计领域中探讨如何在计算机中组织和存储…

FL Studio21.2.3中文版软件新功能介绍及下载安装步骤教程

FL Studio21.2中文版的适用人群非常广泛&#xff0c;主要包括以下几类&#xff1a; FL Studio 21 Win-安装包下载如下: https://wm.makeding.com/iclk/?zoneid55981 FL Studio 21 Mac-安装包下载如下: https://wm.makeding.com/iclk/?zoneid55982 音乐制作人&#xff1a…

软考101-上午题-【信息安全】-网络安全

一、网络安全 1-1、安全协议 SSL(Secure Socket Layer&#xff0c;安全套接层)是 Netscape 于 1994年开发的传输层安全协议&#xff0c;用于实现 Web 安全通信。1996 年发布的 SSL3.0 协议草案已经成为一个事实上的Web 安全标准。 端口号是43。 SSL HTTP HTTPS TLS(Transpo…

整合SpringSecurity+JWT实现登录认证

一、关于 SpringSecurity 在 Spring Boot 出现之前&#xff0c;SpringSecurity 的使用场景是被另外一个安全管理框架 Shiro 牢牢霸占的&#xff0c;因为相对于 SpringSecurity 来说&#xff0c;SSM 中整合 Shiro 更加轻量级。Spring Boot 出现后&#xff0c;使这一情况情况大有…

【论文通读】AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation

AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation 前言AbstractMotivationFrameworkConversable AgentsConversation Programming ApplicationA1: Math Problem SolvingA2: Retrieval-Augmented Code Generation and Question AnsweringA3: Decision…

Linux 给网卡配置ip

ip addr | grep eth9 ifconfig eth9 10.0.0.2 netmask 255.255.255.0 up

算法系列--动态规划--背包问题(4)--完全背包拓展题目

&#x1f495;"这种低水平质量的攻击根本就不值得我躲&#xff01;"&#x1f495; 作者&#xff1a;Lvzi 文章主要内容&#xff1a;算法系列–动态规划–背包问题(4)–完全背包拓展题目 大家好,今天为大家带来的是算法系列--动态规划--背包问题(4)--完全背包拓展题目…

数字化时代多系统安全运维解决方案

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&…

VS2022+ObjectARX 2024环境搭建

1、安装好对应版本的VS2022和AutoCAD版本后&#xff0c;再下载两个文件。如下&#xff1a; 2、 先安装objectarx-for-autocad-2024-win-64bit-dlm.sfx.exe&#xff08;SDK&#xff09;&#xff0c;安装后如下&#xff1a; 3、安装ObjectARXWizard2024.msi&#xff0c;如下&…

AXI Memory Mapped to PCI Express 学习笔记(四)——仿真设计

本文包含有关Vivado Design Suite中对AXI Memory Mapped to PCI Express core进行仿真的示例设计信息。 一、仿真设计概述 在仿真设计中&#xff0c;事务是从Root Port模型发送到配置为Endpoint的AXI Memory Mapped to PCI Express core&#xff0c;并在AXI块RAM控制器设计中…

ubuntu+clangd+vscode 实现项目代码快速跳转(如: Linux 内核源码)

1. 准备工作 虚拟机 ubuntu 环境&#xff0c;笔者用的是 ubuntu20.04。windows 安装好 vscode 软件。 2. 配置过程 2.1 vscode远程连接 ubuntu ubuntu 虚拟机开启 ssh 服务 sudo apt install openssh-server sudo service ssh startvscode 安装 remote-ssh 插件 vscode 远…