归并交换基数简单选择排序

news2024/11/23 21:49:03

文章目录

  • 1 交换排序
    • 1.1 冒泡排序
      • 1.1.1 冒泡排序算法
      • 1.1.2 性能分析
    • 1.2 快速排序
      • 1.2.1 快排的算法
      • 1.2.2 性能分析
      • 1.2.3 快排的特点
  • 2 简单选择排序
    • 2.1 简单排序算法
      • 2.1.1 性能分析
    • 2.2 堆排序
      • 2.2.1 堆的调整
      • 2.2.2 筛选过程算法
      • 2.2.3 堆的建立算法
      • 2.2.4 性能分析
  • 3 归并排序
    • 3.1 性能分析
  • 4 基数排序
    • 4.1 性能分析
  • 5 各种排序算法的比较

1 交换排序

基本思想就是:两两进行比较,如果发生逆序则进行交换,直到所有的记录都排好为止。
常见的交换排序方法:

  • 冒泡排序 O ( n 2 ) O(n^2) O(n2)
  • 快速排序 O ( n l o g 2 n ) O(nlog_2n) O(nlog2n)

1.1 冒泡排序

冒泡排序就是基于简单的交换思想。每趟不断将记录两两比较,并按前小后大规则交换。
在这里插入图片描述

一些结论:

  • n n n个记录,总共需要 n − 1 n-1 n1
  • m m m趟需要比较 n − m n-m nm

1.1.1 冒泡排序算法

void bubble_sort(SqList &L)//冒泡排序算法
{
	int m,i,j;
	RedType x;//交换时临时存储
	for(m=1; m<=n-1; ++m)//总共需要m趟
	{
		for(j=1; j<=n-m; ++j)//交换需要n-m次
		{
			if (L.r[j].key > L.r[j+1].key)
			//两个相邻元素进行比较
			//发生逆序
			{
				x = L.r[j];
				L.r[j] = L.r[j+1];
				L.r[j+1] = x;//交换
			}
		}
	}
}

在这里插入图片描述
已经排好序后,就无需做无用的交换了。

算法的改进:

void bubble_sort(SqList &L)//冒泡排序算法
{
	int m,i,j;flag = 1;//flag作为是否交换的标记
	RedType x;//交换时临时存储
	for(m=1; m<=n-1 && flag==1; ++m)//总共需要m趟
	{
		flag = 0;
		for(j=1; j<=n-m; ++j)//交换需要n-m次
		{
			if (L.r[j].key > L.r[j+1].key)
			//两个相邻元素进行比较
			//发生逆序
			{
				flag = 1;//发生交换,flag置为1
				x = L.r[j];
				L.r[j] = L.r[j+1];
				L.r[j+1] = x;//交换
			}
		}
	}
}

1.1.2 性能分析

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

1.2 快速排序

基本思想:任意取一个元素,如第一个元素,为中心。
在这里插入图片描述
采用递归的思想,结束条件是子表只剩一个元素。
在这里插入图片描述

  • 基本思想: 通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序。

  • 具体实现: 选定一个中间数作为参考,所有元素与之比较,小的调到其左边,大的调到其右边。

  • (枢轴)中间数: 可以是第一个数、最后一个数、最中间一个数、任选一个数等。

1.2.1 快排的算法

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

1.2.2 性能分析

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

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

1.2.3 快排的特点

  1. 每一趟的子表的形成是采用从两头向中间交替式逼近法
  2. 由于每趟中对各子表的操作都相似,可采用递归算法
  3. 快排是个不稳定的算法

在这里插入图片描述

2 简单选择排序

在这里插入图片描述

示意图:

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

2.1 简单排序算法

在这里插入图片描述

2.1.1 性能分析

在这里插入图片描述

2.2 堆排序

在这里插入图片描述
堆的实质是完全二叉树。
小根堆就是每一个根节点都比左右孩子来的小;大根堆就是每一个根节点都比左右孩子来的大。即一个根是最大值,一个根是最小值,就可以用来排序。
在这里插入图片描述
在这里插入图片描述

2.2.1 堆的调整

在这里插入图片描述
在这里插入图片描述
大根堆就找大的数值。

可以看出:
对一个无序序列反复“筛选”就可以得到一个堆;
即:从一个无序序列建堆的过程就是一个反复“筛选”的过程。

显然:
单结点的二叉树是堆;在完全二叉树中所有以叶子结点(序号 ⅰ > / 2 ⅰ>/2 >/2)为根的子树是堆。

在这里插入图片描述
由于堆实质上是一个线形表,那么我们可以顺序存储一个堆。在这里插入图片描述

2.2.2 筛选过程算法

在这里插入图片描述

2.2.3 堆的建立算法

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

2.2.4 性能分析

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

3 归并排序

基本思想:将两个或两个以上的有序子序列归并为一个有序序列。
在这里插入图片描述
两个两个来。(或两个以上)
在这里插入图片描述
总共需要 l o g 2 n log_2n log2n趟。
在这里插入图片描述
线性表,双指针,即可比较合并。

现在两个子序列是相邻的。也是两个指针。
在这里插入图片描述

3.1 性能分析

在这里插入图片描述

4 基数排序

不需要比较,思想就是分配和收集。也叫桶排序或箱序:设置若干个箱子,将关键字为k的记录放入第k个箱子,然后在按序号将非空的连接。

基数排序: 数字是有范围的,均由0-9这十个数字组成,则只需设置十个箱子,相继按个、十、百.…进行排序。

在这里插入图片描述
以上就个位就有序了。之后按十位分:在这里插入图片描述
十位有序,按照百位分:
在这里插入图片描述
发现排序完成。

4.1 性能分析

在这里插入图片描述

5 各种排序算法的比较

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

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

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

相关文章

CertGetCertificateChain trust error CERT_TRUST_REVOCATION_STATUS_UNKNOWN

执行命令&#xff1a; curl --cacert http_ca.crt -u elastic https://localhost:9200 结果报错了 直接访问https://localhost:9200/ &#xff0c;正常 解决办法&#xff1a; curl --cacert http_ca.crt -u elastic https://localhost:9200 --insecure

微信小程序:实现提示窗确定,取消执行不同操作(消息提示确认取消)showModal

效果 代码 wx.showModal({title: 提示,content: 是否确认退出,success: function (res) {if (res.confirm) {console.log(用户点击确定)} else if (res.cancel) {console.log(用户点击取消)}}})

linux 故障定位

linux 故障定位 1. cpu1.1 说明1.2 分析工具1.3 使用方式 2. 内存2.1 说明2.2 分析工具2.3 使用方式 3. I/O3.1 说明3.2 分析工具3.3 使用方式 4. 网络4.1 说明4.2 分析工具4.3 使用方式 5. 系统负载5.1 说明5.2 分析工具5.3 使用方式 6. 火焰图6.1 说明6.2 安装依赖库6.3 安装…

应用程序流量警报软件

为了避免因使用资源密集型应用程序&#xff08;如基于云的应用程序&#xff09;而出现的潜在中断和延迟问题&#xff0c;企业需要监控应用程序流量并尽快找到网络事件的根本原因。业务的应用程序流量监视是了解业务关键型应用程序何时具有高时间可用性以及何时存在利用率超过基…

网上订货系统源码 购买后交付一些什么内容

随着电子商务的快速发展&#xff0c;越来越多的企业开始意识到建立一个高效的网上订货系统的重要性。网上订货系统不仅可以提高企业的销售效率&#xff0c;还可以降低成本&#xff0c;提升客户满意度。然而&#xff0c;要建立一个完善的网上订货系统并不容易&#xff0c;需要考…

SpringMVC 拦截器详解

目录 一、介绍 二、过滤器与拦截器的简单对比 三、自定义拦截器 四、注册拦截器 五、案例演示-登录拦截器 5.1 自定义拦截器 5.2 注册拦截器 编写的初衷是为了自己巩固复习&#xff0c;如果能帮到你将是我的荣幸❣️ 一、介绍 SpringMVC提供的拦截器类似于JavaWeb中的过…

火山引擎VeDI最新分享:消费行业的数据飞轮从“四更”开始

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 数据飞轮&#xff0c;正在为消费行业的数字化升级提供一套全新模式。 在刚刚结束的《全链路增长&#xff1a;数据飞轮转动消费新生力》专场活动上&#xff0c;火山引…

事务隔离:为什么你改了我还看不见

前提概要 你肯定不陌生&#xff0c;和数据库打交道的时候&#xff0c;我们总是会用到事务。最经典的例子就 是转账&#xff0c;你要给朋友小王转 100 块钱&#xff0c;而此时你的银行卡只有 100 块钱。 转账过程具体到程序里会有一系列的操作&#xff0c;比如查询余额、做加减法…

第五章 Scala 变量与运算符

1 变量 变量是一种使用方便的占位符&#xff0c;用于引用计算机内存地址&#xff0c;变量创建后会占用一定的内存空间。基于变量的数据类型&#xff0c;操作系统会进行内存分配并且决定什么将被储存在保留内存中。因此&#xff0c;通过给变量分配不同的数据类型&#xff0c;你…

MyBatis查询数据库入门学习<一>

目录 1.MyBatis 是什么&#xff1f; MyBatis官网&#xff1a;mybatis – MyBatis 3 | 简介 2.为什么要学习 MyBatis&#xff1f; 3.怎么学MyBatis&#xff1f; 4.第⼀个MyBatis查询 4.1 创建数据库和表 4.2 添加MyBatis框架⽀持 4.2.1 ⽼项⽬添加MyBatis 4.2.2 新项⽬添…

Git时间:版本控制工具进阶

Git时间&#xff1a;版本控制工具进阶 忽略文件 Git允许用户将指定的文件或目录排除在版本控制之外&#xff0c;它会检查代码仓库的目录下是否存在一个名为.gitignore的文件&#xff0c;如果存在&#xff0c;就去一行行读取这个文件中的内容&#xff0c;并把每一行指定的文件…

Matlab的SimuLink对FS32K144编程--SPI通讯控制12bitDAC输出

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 1、硬件介绍&#xff0c;DAC芯片&#xff1a;AD5328BRUZ DAC_SPI_SCK----PTD0(SPI1) DAC_SPI_DIN----PTE0(SPI1)单片…

Android 之 使用 SoundPool 播放音效

本节引言&#xff1a; 第九章给大家带来的是Android中的多媒体开发&#xff0c;与其说是多媒体开发还不如是多媒体相关API的 的使用&#xff0c;说下实际开发中我们做了一些和多媒体搭边的东西&#xff1a;拍照&#xff0c;录音&#xff0c;播放音乐&#xff0c;播放视频... 嗯…

stable-diffusion-webui汉化教程

第一种方法 1.打开stable diffusion webui&#xff0c;进入"Extensions"选项卡 2.点击"Install from URL" 3、注意"URL for extension’s git repository"下方的输入框 4、填入地址&#xff1a;https://github.com/VinsonLaro/stable-diffus…

让企业出海支付流程更加安全,亚马逊云科技推出支付加密服务

在咖啡店买一杯咖啡&#xff0c;在电商平台下单一件商品&#xff0c;其消费流程背后&#xff0c;都要涉及到金融支付的多个环节&#xff0c;而其中对金融数据存储和流通的加密则是保障金融安全的重要环节。 加密是保障消费者支付流程安全的最大挑战。亚马逊云科技首席安全布道…

医学案例|ROC曲线

一、案例介绍 研究者想要进行“糖化血蛋白”的研究&#xff0c;对糖尿病患者和非糖尿病患者各100名检测糖化血红蛋白&#xff08;HbAlc&#xff09;含量&#xff0c;希望可以研究糖化血蛋白对患有糖尿病的情况是否有诊断价值&#xff0c;如果有最佳的诊断界值是多少。 二、问…

MQ, RocketMQ, 安装

文章说明 本文主要说明RocketMQ的几种常见的安装方式。之前在工作中也用过RocketMQ&#xff0c;但是一直用的是测试环境上的&#xff0c;也没有自己动手安装过。这次专门抽了时间学习了一下。 文章目录 文章说明参考文献安装windows安装环境要求下载配置环境变量启动注意事项 …

OJ练习第146题——杨辉三角 II

力扣链接&#xff1a;119. 杨辉三角 II 题目描述 给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 Java代码&#xff08;直接法&#xff09; class Solution {/*** 获取…

程序员自由创业周记#4:从一笔30美元的收入谈起

程序员自由创业周记#4&#xff1a;从一笔30美元的收入谈起 pexels-freestocksorg-127713 本文是一位程序员进行独立开发创业的记录&#xff0c;将分享创业过程中的所思所想以及收支明细。在文末&#xff0c;您还可以找到之前的历史文章。 惊喜之旅 这次的惊喜源于 学伟扫描Pro …

初探webAssembly | 京东物流技术团队

1 WebAssembly是什么&#xff1f; 一种运行在现代网络浏览器中的新型代码&#xff0c;并且提供新的性能特性和效果 W3C WebAssembly Community Group开发的一项网络标准&#xff0c;对于浏览器而言&#xff0c;WebAssembly 提供了一条途径&#xff0c;让各种语言编写的代码以接…