数据结构与算法(二十)快速排序、堆排序(四)

news2024/11/25 1:48:23

数据结构与算法(三)软件设计(十九)icon-default.png?t=N176https://blog.csdn.net/ke1ying/article/details/129252205

  • 排序

分为 稳定排序 和 不稳定排序

内排序 和 外排序

内排序指在内存里,外排序指在外部存储空间排序

1、排序的方法分类

插入排序:直接插入排序  和 希尔排序

交换类排序:冒泡排序  和   快速排序

选择类排序: 简单选择类排序 和 堆排序(效率非常高,处理过程复杂)

归并排序

基数排序

直接插入排序

23 30 29  17

第一步:23和30比较,位置不变。

第二步:29和30比较,29和23比较,发现29大于23小于30,所以插入中间

23 29 30 17

第三步:17和30比较,17和29比较,17和23比较,发现17小于23

17 23 29 30

希尔排序(shell排序)

给一组10位数

第一步:d1 = n/2 = 5 ,每5个一组,从第一个数和第六个数比较,第二个数和第七个数比较...依次类推,小的排到前面。

第二步:d2 = d1/2 = 3(取奇数),每3个一组,从第一个数和第六个数比较,第二个数和第七个数比较...依次类推,小的排到前面。

第三步;d3 = d2/2 = 1(取奇数),直接插入排序最后得到结果。

这样效率会高很多。

直接选择排序

23 30 29 17

第一步:选择最小的17 放在最前面 ,所以 是17 23 30 29

第二步:在剩下里在选择最小的23,不动

第三步:在剩下里再选择最小的29,所以17 23 29 30

堆排序(排序算法最复杂的算法之一)

 

由图k1 = 10,k2=20,k3=13,k4=40,k5=50,k6=15,k7=16,k8=50,k9=45,k10=80

满足k1 <=k2 (10<20) 且 k1<k3 (10<13)

所以这时候就是小顶堆, 根永远比左孩子节点和右孩子节点小。

大顶堆则就是根永远比左孩子节点和右孩子节点大。

堆要先构建:

第一步:用给的数构建一个完全二叉树

第二步:每次用最下面的非叶子节点与叶子结点比较,交换,依次往上比较。

堆排序使用非常广泛,效率高,特别是数值非常多的时候,而要求求前几名(前10名或者20名)的时候,这种场景非常好。

冒泡排序

通过相邻的元素之间比较和交换,将较小或者较大的元素逐渐从底部移动到顶部。

快速排序

采用的是分治法,基本思想把一个问题分成若干规模更小的相似子问题。

选择一个基准,每次与这个数比较,小于这个基准的在左边,大于的在右边,全部比对完后,再对两边的数做排序

归并排序

将两个或两个以上的有序子表合并成一个新的有序表。当两个有序表继续合并,这时候叫做二路合并。

32 13 98 12 22 29 30 28

第一步:[13 23][12 98][22 29][28 30]

第二步:[12 13 23 98][22 28 29 30]

第三步:[12 13 22 23 28 29 30 98 ]

基数排序

第一步;按个位排序。

第二步:按十位排序。

第三步:按百位排序。

 

稳定的排序包含:直接插入、冒泡排序、归并排序、基数排序。

归并排序空间复杂度是O(n),其他基本都是O(1)。

堆排序效果比较好,因为涉及到树,往往就是O(nlog2n),归并和快速排序也类似与二分,所以效率也不低。

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

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

相关文章

下拉框推荐-Suggest-SUG

什么是下拉框推荐 在我们使用各种app&#xff08;飞猪&#xff09;想要搜索我们想要的东西&#xff0c;假设我想要上海迪士尼的门票&#xff0c;那么精确的query是“上海迪士尼门票”&#xff0c;要打7个字&#xff0c;如果在你输入“上海”的时候app就推荐了query“上海迪士尼…

无线蓝牙耳机哪个牌子好?2023质量好的无线蓝牙耳机推荐

近几年&#xff0c;随着蓝牙技术的不断进步&#xff0c;使用蓝牙耳机的人也越来越多。蓝牙耳机的出现&#xff0c;不仅能让我们摆脱线带来的约束&#xff0c;还能提升我们学习和工作的效率。最近看到很多人问&#xff0c;无线蓝牙耳机哪个牌子好&#xff1f;下面&#xff0c;我…

accent-color一行代码,让你的表单组件变好看

不做切图仔,从关注本专栏开始 文章目录 不做切图仔,从关注本专栏开始前言兼容性语法继承性智能前言 在之前的网站开发中,我们是很难去更改的你某些控件的颜色。我们可能要使用各种技巧来自定义我们的控件。好消息是,今天如果我们想要去改变控件的颜色,css为我们提供了一些…

docker删除已停止的容器

一、docker删除已停止的容器 1、根据容器的状态&#xff0c;删除Exited状态的容器 先停止容器、再删除镜像中的容器、最后删除none的镜像。执行命令如下&#xff1a; docker stop $(docker ps -a | grep "Exited" | awk {print $1 }) #停止容器 docker rm $(docke…

【C++初阶】1. C++入门

1. 前言 1. 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机界提出了OOP(…

Python每日一练(20230228)

目录 1. 螺旋矩阵 II ★★ 2. 排列序列 ★★★ 3. 数字 1 的个数 ★★★ 1. 螺旋矩阵 II 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3…

java本地搭建宝塔部署实战likeadmin系统vue前端源码 - admin端(二)

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 上一期给大家分享了java版likeadmin的server端本地搭建运行&#xff0c;宝塔部署的方式&#xff0c;今天来给大家分享admin前端vue在本地搭建&#xff0c;与打包发布到宝塔的方法。感兴趣的朋友可以自行下载学习。…

Unity——制作简易红绿灯

效果图与该类红绿灯相似。前提准备首先在场景中&#xff0c;创建一个正方体&#xff08;灯座&#xff09;&#xff0c;球体&#xff08;作为灯&#xff09;&#xff0c;把其放置成红绿灯结构。创建四个材质球&#xff0c;基础色分别赋为灰色&#xff0c;红色&#xff0c;黄色&a…

如何彻底删除SQL Server 2008中的登录账号

我个人遇到的最烦人的事情之一是 SQL Server Management Studio中“服务器名称和登录名”对话框的下拉列表。 以下是我想从 SSMS 连接屏幕中删除某些内容的两种情况: 键入的服务器名称不正确 服务器将来不需要。当我看到服务器的名称,它已经存在了很长一段时间,我知道我不会…

gismo中用等几何解决线弹性问题的程序示例---未完待续2023.2.28

文章目录前言一、调用线弹性程序示例1.1 对plateWithHole.xml文件的理解1.2 程序及注释1.3 对边界力函数的理解总结 #pic_center前言 gismo中用等几何解决线弹性问题 一、调用线弹性程序示例 1.1 对plateWithHole.xml文件的理解 算例来自文章&#xff1a;Isogeometric analysi…

操作系统真相还原_第7章:中断

文章目录7.1 中断分类外部中断内部中断7.2 中断描述符表中断门描述符中断描述符表寄存器IDTR中断处理过程中断发生时的栈变化7.3 可编程中断控制器8259A级联8259A8259A的编程7.4 编写中断处理程序中断初始化过程中断执行过程简单的中断处理程序中断处理程序改进思考7.5 8253定时…

PXC高可用集群(MySQL)

1. PXC集群概述 1.1. PXC介绍 Percona XtraDB Cluster&#xff08;简称PXC&#xff09; 是基于Galera的MySQL高可用集群解决方案Galera Cluster是Codership公司开发的一套免费开源的高可用方案PXC集群主要由两部分组成&#xff1a;Percona Server with XtraDB&#xff08;数据…

XXL-JOB

XXL-JOB介绍 XXL-JOB是一个轻量级分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 官网&#xff1a;https://www.xuxueli.com/xxl-job/ 文档&#xff1a;分布式任务调度…

GO中sync 包的 RWMutex 读写互斥锁

文章目录背景RWMutex 简介代码验证多个协程请求读锁 RLock() 和 RLock()读写交错 RLock() 和 Lock()写入的时候读取读取的时候写入请求多个写Lock() 和 Lock()背景 Mutex 互斥锁是严格锁定读和写&#xff0c;如果我们需要单独对读或者写添加锁需要使用 sync包的RWMutex 针对读…

Linux服务器快速安装MySQL数据库

Linux服务器快速安装MySQL数据库 mysql官网下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 推荐使用命令下载安装&#xff0c;比较快 开始安装mysql 1.通过wget下载安装包 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.no…

运动耳机怎样戴不容易掉,运动不容易掉的运动蓝牙耳机推荐

在运动当中总是避免不了大幅度的晃动、跳跃&#xff0c;但是普通的耳机在运动当中佩戴时&#xff0c;耳机会时常出现掉落或者佩戴不牢固的现象发生&#xff0c;下面就给大家分享几款在运动当中佩戴较为稳固的运动蓝牙耳机吧~1、南卡Runner Pro4骨传导蓝牙运动耳机 &#xffe5;…

卡尔曼滤波学习

原教程地址&#xff1a;KalmanFilter.NET 卡尔曼滤波广泛应用在雷达系统&#xff08;目标跟踪&#xff09;中&#xff0c;但是其实它还可以应用在任何需要估算和预测的领域。 一、一维卡尔曼滤波 通过8个数值例子介绍卡尔曼滤波&#xff0c;涉及平均数、方差、标准差等&#…

解决Spring Data Jpa 实体类自动创建数据库表失败问题

先说一下我遇到的这个问题&#xff0c;首先我是通过maven创建了一个spring boot的工程&#xff0c;引入了Spring data jpa&#xff0c;结果实体类创建好之后&#xff0c;运行工程却没有在数据库中自动创建数据表。 找了半天发现是一个配置的问题! hibernate.ddl-auto节点的配…

【python学习笔记】:条件语句

Python 条件语句 Python条件语句是通过一条或多条语句的执行结果&#xff08;True或者False&#xff09;来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空&#xff08;null&#xff09;值为true&#xff0c;0 或者 null为fa…

Vue 中过滤器 filter 使用教程

Vue 过滤器 filter 使用教程文章目录Vue 过滤器 filter 使用教程一、过滤器1.1 过滤器使用的背景1.2 格式化时间的不同实现1.3 过滤器的使用1.4 过滤器总结一、过滤器 1.1 过滤器使用的背景 过滤器提供给我们的一种数据处理方式。过滤器功能不是必须要使用的&#xff0c;因为它…