[ 数据结构 -- 手撕排序算法总结篇 ]

news2025/1/25 4:28:47

文章目录

  • 前言
  • 一、常见的排序算法
  • 二、测试排序的性能对比
    • 随机数排序时间对比
    • 有序数排序时间对比
  • 三、排序算法的复杂度
  • 四、排序算法的稳定性


前言

手撕排序算法总结
本篇文章进行总结,我会对比并分析常见的几种排序,例如像插入排序,冒泡排序,希尔排序,选择排序,快速排序,堆排序,归并排序等等!
这篇文章我先来给大家手撕一下总结七大排序算法!

大家可以点下面的链接去阅读其他的排序算法:
C语言手撕排序算法


正文开始!

一、常见的排序算法

在这里插入图片描述

二、测试排序的性能对比

void TestOP()
{
	srand(time(0));
	const int N = 1000000;
	int* a1 = (int*)malloc(sizeof(int) * N);
	int* a2 = (int*)malloc(sizeof(int) * N);
	int* a3 = (int*)malloc(sizeof(int) * N);
	int* a4 = (int*)malloc(sizeof(int) * N);
	int* a5 = (int*)malloc(sizeof(int) * N);
	int* a6 = (int*)malloc(sizeof(int) * N);
	for (int i = 0; i < N; ++i)
	{
		a1[i] = rand();
		a2[i] = a1[i];
		a3[i] = a1[i];
		a4[i] = a1[i];
		a5[i] = a1[i];
		a6[i] = a1[i];
	}
	int begin1 = clock();
	InsertSort(a1, N);
	int end1 = clock();
	int begin2 = clock();
	ShellSort(a2, N);
	int end2 = clock();
	int begin3 = clock();
	SelectSort(a3, N);
	int end3 = clock();
	int begin4 = clock();
	HeapSort(a4, N);
	int end4 = clock();
	int begin5 = clock();
	QuickSort(a5, 0, N - 1);
	int end5 = clock();
	int begin6 = clock();
	MergeSort(a6, N);
	int end6 = clock();
	printf("InsertSort:%d\n", end1 - begin1);
	printf("ShellSort:%d\n", end2 - begin2);
	printf("SelectSort:%d\n", end3 - begin3);
	printf("HeapSort:%d\n", end4 - begin4);
	printf("QuickSort:%d\n", end5 - begin5);
	printf("MergeSort:%d\n", end6 - begin6);
	free(a1);
	free(a2);
	free(a3);
	free(a4);
	free(a5);
	free(a6);
}

int main()
{
	TestOP();
	return 0;
}

对于10万个数据进行排序,测试每种排序所要花费的时间。

随机数排序时间对比

在这里插入图片描述
我们可以明显的看到选择排序的效率是非常差的,直接选择排序仅次于直接选择排序,像希尔排序,堆排序,快速排序和归并排序的效率还是蛮高的!

有序数排序时间对比

在这里插入图片描述
在这里快速排序就占不上优势了。原因->[ 数据结构 – 手撕排序算法第六篇 ] 快速排序这里做了详细解释!
直接插入排序的效率也挺高的。因为每次都是取数据进行尾插。
其他排序效率都差不多。

三、排序算法的复杂度

在这里插入图片描述

四、排序算法的稳定性

稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录。若经过排序以后,这些记录的相对次序保持不变,即在原序列中r[i]=r[j],并且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定性的,否则称为不稳定性的。

举个栗子:

在这里插入图片描述

在这里插入图片描述


至此排序算法全部完结!
(本章完!)

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

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

相关文章

【金猿案例展】福特电马——一键五联私域流量运营

‍映盛中国案例本项目案例由映盛中国投递并参与“数据猿年度金猿策划活动——《2022大数据产业年度创新服务企业》榜单/奖项”评选。‍数据智能产业创新服务媒体——聚焦数智 改变商业随着中国电动车市场及消费者对电动汽车的需求的不断变化&#xff0c;汽车市场进入存量竞争时…

如何用VS2010创建并生成动态链接库

1、目的 在某些应用程序场景下&#xff0c;需要将一些类或者方法编译成动态链接库dll&#xff0c;以便别的.exe或者.dll文件可以通过第三方库的方式进行调用&#xff0c;下面就简单介绍一下如何通过VS2010来创建动态链接库。 2、新建动态链接库 1&#xff09; 打开VS2010&…

546103-85-9,PR-AMC,二肽标记肽

PR-AMC, a fluorogenic Plasmodium falciparum dipeptidyl aminopeptidase 1 (DPAP1, cathepsin C) substrate.一种含氟恶性疟原虫二肽基氨基肽酶1 (DPAP1&#xff0c;组织蛋白酶C)底物。编号: 177167 中文名称: 二肽标记肽PR-7-氨基-4-甲基香豆素2HCl英文名: H-Pro-Arg-AMCCAS…

clickhouse 数据字典使用详解

一、数据字典介绍 数据字典是ClickHouse提供一种非常简单且实用的存储媒介&#xff0c;他以键值和属性映射的形式定义数据。字典中的数据会主动或被动加载到内存并支持动态更新。由于字典数据常驻内存的特性&#xff0c;所以非常适合保存常量或经常使用的维度表数据&#xff0c…

2001-2020年沪深A股上市公司管理者短视主义指标数据

2001-2020年沪深A股上市公司管理者短视主义指标数据 1、时间&#xff1a;2001-2020年 2、包括所有沪深A股所有上市公司 3、指标包括&#xff1a; 证券代码&#xff1a;以上海证券交易所和深圳证券交易所公布的证券代码为准。 证券简称&#xff1a;以上海证券交易所和深圳证…

从搭建到落地,详解证券基金行业数字化运营体系

近年来&#xff0c;金融行业的数字化转型呈现了新的特点&#xff0c;即要做更精准的营销和数字化运营。本文根据神策数据杨雪杉关于《面向落地的证券基金行业运营体系搭建》的主题演讲整理&#xff0c;点击文末“阅读原文”即可观看完整版演讲回放。一、基于 SDAF 数据闭环方法…

ubuntu20.04 设置 rc.local 开机自启动脚本一文配置

前言 系统:ubuntu20.04LTS 本来觉得似乎好像是一件简单的事情 实际运行处理的时候发现还是有点复杂,面对这样的过程中的总结如下: 第一步 终端执行查看开机可以启动的服务, 执行 ls /lib/systemd/system 你可以看到有很多启动脚本, 其中就有我们需要的 rc-local.s…

让你室友、工友、小孩断网 安全风险演示

前提&#xff1a; ① 、你需要 和 你室友处于同一个局域网&#xff0c;互相能ping通 ②、你需要知道你室友的IP ③、您可能需要一个linux 设备&#xff0c;手机也行&#xff08;需要安装termux 来执行命令&#xff09;、linux系统电脑、树莓派等都可以。 -----------------…

【MAX7800羽毛板更新固件及下载bug修复】

【MAX7800羽毛板更新固件及下载bug修复】1. 前言2. 首次固件更新2.1 更新MAX32625PICO&#xff08;“PICO”&#xff09;调试适配器固件2.2 使用eclipse开发3. 下载bug修复3.1 当你的下载口出现Error: Target not examined yet3.2 修复方法5. 小结1. 前言 原理图和BOM可在MAX7…

express再度复习,小白篇

js----后端编程&#xff0c;Express框架,npm包管理工具,- es6模块化,使用express创建web应用,路由拆分&#xff0c;中间件 &#xff0c; 热更新&#xff0c;脚手架_阿 尭的博客-CSDN博客之前学习的时候整理的一篇草率博客&#xff0c;复习的时候混忘了。今天再重新学习一下expr…

【强化学习基础】强化学习的基本概念:状态、动作、智能体、策略、奖励、状态转移、轨迹、回报

文章目录1.状态&#xff08;State&#xff09;2.动作&#xff08;Action&#xff09;3.智能体&#xff08;Agent&#xff09;4.策略&#xff08;Policy&#xff09;5.奖励&#xff08;Reward&#xff09;6.状态转移&#xff08;State transition&#xff09;7.智能体与环境交互…

“margin”外边距的各种奇特现象

我们大家在初学css布局html页面结构的时候&#xff0c;肯定会经常使用到“margin”外边距这个属性&#xff0c;这个属性对我们的页面布局十分有用&#xff0c;也十分方便&#xff0c;但是这个属性在使用的时候经常会出现一些奇特的现象&#xff0c;导致我们的页面布局和想要完成…

开发一个MyBatis通用Mapper的轮子

目录 一、前言 二、需求 三、实现原理 1、基于MyBatis3提供的SqlProvider构建动态Sql 2、基于自定义注解&#xff0c;为实体和数据库表建立对应关系 四、代码实现 1、自定义注解 2、几个pojo&#xff0c;用来保存实体对应的信息 3、定义开头说的BaseMapper 4、SqlPro…

Nginx-负载均衡

负载均衡的意思是在服务器集群中&#xff0c;需要有一台服务器作为调度者&#xff0c;客户端所有的请求都有调度者接收&#xff0c;调度者再根据每台服务器的负载情况&#xff0c;将请求分配给对应的服务器去处理 配置过程 1、需要在nginx.conf配置文件中添加服务组 服务组中…

linux安装stable diffusion2.0完整教程-还不会安装sd2.0?一篇文章教会你AI绘画

以下教程出自飞链云AI技术人员&#xff0c;欢迎使用目前国内顶尖的AI绘画工具&#xff0c;微信小程序搜索&#xff1a;【飞链云版图】 注意&#xff1a;请严格按照以下步骤进行&#xff0c;可非常容易进行安装&#xff0c;其他环境不保证丝滑安装&#xff1b; 安装前准备 ub…

分析GC日志

文章目录1.GC日志格式1.1 GC分类1.2 GC日志结构剖析1.3 GC日志分析工具1.4 人生感悟1.GC日志格式 1.1 GC分类 针对HotSpot VM的实现&#xff0c;它里面的Gc按照回收区域又分为两大种类型: 一种是部分收集&#xff08;Partial GC&#xff09;&#xff0c;一种是整堆收集&#…

三.线程的状态

正常线程的五大状态 &#xff1a;新建状态&#xff0c;就绪状态&#xff0c;运行状态&#xff0c;阻塞状态&#xff0c;死亡状态 初始(NEW)&#xff1a;新创建了一个线程对象&#xff0c;但还没有调用start()方法。 运行(RUNNABLE)&#xff1a;Java线程中将就绪&#xff08;re…

小白想学习python?怎么学?

首先&#xff0c;学习Python编程技术&#xff0c;自学或者参加培训学习都适用&#xff0c;每个人都有自己的学习方式和方法。 一&#xff1a;明确自己的学习目标。 不管我们学习什么样的知识&#xff0c;都要对自己的学习目标有一个明确的认识。只有这样才能朝着目标持续的前…

26岁学历低的我,是如何从工厂转行Python工程师?

本人坐标长沙&#xff0c;专科工程造价专业。 转行Python工程师薪资&#xff1a;13K。 饮水思泉&#xff0c;在转行的过程中&#xff0c;同学跟老师们对我的帮助非常大&#xff0c;自己找到工作以后&#xff0c;也试着写篇文章&#xff0c;将自己的心得经验全部分享出来&#…

单例模式及其线程安全问题

目录 ​ 1.设计模式 2.饿汉模式 3.懒汉模式 4.线程安全与单例模式 1.设计模式 设计模式是什么? 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的 单例模式的作用就是保证某个…