超详细十大排序算法

news2024/11/15 19:42:29

一、排序总结

性能指标:稳定性时间复杂度空间复杂度

排序算法的稳定性是指当排序的元素中存在相同的值时,排序算法能够保持它们原先的相对顺序。如果一个排序算法是稳定的,那么在排序后,相同值的元素在原始序列中的相对位置不会改变。这意味着如果两个元素A和B的值相同,并且在原始序列中A出现在B之前,那么在排序后A仍会出现在B之前。

稳定性对于一些特定的应用很重要,比如对于具有相同值但不同其他特性的元素进行排序时,我们希望保持它们的原始位置关系。例如,对于学生成绩相同但按照不同条件排序的情况,稳定性就显得尤为重要。因此,对于某些应用来说,稳定性是排序算法的一个重要性质。

 

二、比较排序

2.1 冒泡排序

void Bubble_sort(int arr*, int size)
{
	int j,i,tmp;
	for (i = 0; i < size-1;i ++)
	{
		int count = 0;
		for (j = 0; j < size-1 - i; j++)	
		{
			if (arr[j] > arr[j+1])    //升序
			{
				tem = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = tmp;
				count = 1;
			}
		}
		if (count == 0)			//如果没有交换位置,则说明已经排好序,直接退出循环
        {
            break;
        }
}

2.2 简单选择排序

常见排序算法之选择排序-CSDN博客

2.3 直接插入排序

常见排序算法之插入排序_插入排序 csdn-CSDN博客

2.4 希尔排序

常见排序算法之插入排序_插入排序 csdn-CSDN博客

2.5 堆排序

堆排序详细理解-CSDN博客

2.6 归并排序

常见排序算法之归并排序-CSDN博客

2.7 快速排序

常见排序算法之快速排序-CSDN博客

三、非比较排序

3.1 桶排序

3.2 基数排序

基数排序详解-CSDN博客

基数排序的时间复杂度和空间复杂度也取决于待排序序列的长度和元素的范围。

时间复杂度:
在一般情况下,对于n个d位数,基数排序的时间复杂度为O(d*(n+k)),其中n是待排序序列的长度,k是每一位数字的范围。需要进行d轮排序,每轮排序的时间复杂度为O(n+k),因此总的时间复杂度可以表示为O(d*(n+k))

空间复杂度:
基数排序的空间复杂度取决于辅助空间的使用。在基数排序中,通常需要一个大小为n的辅助

数组以及一个大小为k的桶数组,因此基数排序的空间复杂度为O(n+k)

3.3 计数排序

非比较排序之计数排序-CSDN博客

计数排序是一种非比较排序算法,其时间和空间复杂度取决于待排序序列中元素的范围。

时间复杂度

  • 最好情况时间复杂度为O(n+k),其中n是待排序序列的长度,k是待排序序列中的最大值和最小值的差值加上1。在最好情况下,计数排序仅需要遍历一遍待排序序列,并且需要遍历k个计数数组。
  • 最坏情况时间复杂度亦为O(n+k)
  • 平均情况时间复杂度也是O(n+k)

空间复杂度

  • 空间复杂度为O(k),其中k是待排序序列中的最大值和最小值的差值加上1。计数排序需要一个大小为k的辅助数组来存储计数的中间结果。

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

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

相关文章

uni-admin:基于uni-app与uniCloud的云端管理后台开发神器

随着移动互联网和云计算技术的飞速发展&#xff0c;越来越多的企业和开发者开始寻求一种快速、高效且灵活的解决方案来构建自己的管理后台系统。在这样一个背景下&#xff0c;uni-admin应运而生&#xff0c;它基于uni-app和uniCloud&#xff0c;为开发者提供了一个功能强大、易…

YOLO检测环境安装配置

YOLO介绍 YOLO学习手册&#xff1a;YOLO教程 YOLO [ˈjoʊloʊ]&#xff08;You Only Look Once&#xff09;是一种快速而准确的目标检测算法&#xff0c;由Joseph Redmon等人在2016年提出。YOLO被广泛应用于计算机视觉领域&#xff0c;包括实时视频分析、自动驾驶、安防监控、…

理解 Bearer Token:什么是它以及如何运作?

在当前数字化时代&#xff0c;网络安全尤为关键。随着技术快速进步&#xff0c;需求日益增长&#xff0c;保障应用程序中用户数据的安全成为开发者们的首要任务。其中&#xff0c;Bearer Token 作为一种高效的验证策略&#xff0c;在防止未授权访问中发挥着不可或缺的作用。 解…

高清实拍类型视频素材去哪里找?高清实拍素材网站分享

在这篇文章中&#xff0c;我将为大家介绍一些高清实拍类型的视频素材资源&#xff0c;这些资源对于我们新媒体创作者来说至关重要。优质的视频素材能显著提升作品的吸引力&#xff0c;因此选择合适的视频素材平台非常关键。下面我将详细介绍几个非常实用的视频素材平台&#xf…

CV技术指南 | 其实Mamba是一种线性注意力?清华大学黄高团队揭秘开视觉Mamba的真实面目!

本文来源公众号“CV技术指南”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;其实Mamba是一种线性注意力&#xff1f;清华大学黄高团队揭秘开视觉Mamba的真实面目&#xff01; 前言 本文揭示了 Mamba 模型与 Linear Attention …

shell脚本和变量

一、shell脚本 脚本就是可运行的代码的集合&#xff0c;脚本语言&#xff08;计算机语言&#xff09;的特点&#xff1a;从上到下&#xff0c;按行执行。 Python&#xff1a;脚本语言&#xff0c;格式更严谨&#xff0c;严格地执行缩进。也是从上到下按行执行。 shell脚本运…

Linux文件权限信息和Linux文件与文件夹的管理

目录 前言一、系统环境二、Linux文件权限信息2.1 查看Linux文件权限信息2.2 修改Linux文件权限信息2.2.1 chmod命令2.2.2 chown命令 三、Linux文件与目录的管理3.1 查看文件或文件夹3.1.1 查看文件内容3.1.2 查看文件夹内容 3.2 新增文件或文件夹3.2.1 新增文件3.2.2 新增文件夹…

从零开始利用MATLAB进行FPGA设计(七)固化程序

FPGA开发板&#xff1a;AX7020&#xff1b;Xilinx 公司的 Zynq7000 系列的芯片XC7Z020-2CLG400I&#xff0c;400引脚 FBGA 封装。 HARDWARE PLATFORM在2019以后的vivado中已经没有了。本期实际上已经与MATLAB无关&#xff0c;主要介绍通过VITIS等方法进行程序固化。 目录 ZY…

光伏+储能,势在必行!

随着全球对可再生能源需求的不断增长&#xff0c;光伏行业正迎来前所未有的发展机遇。然而&#xff0c;光伏发电的间歇性和不稳定性特点&#xff0c;使得储能技术成为解决其并网难题、提高能源利用效率的关键。因此&#xff0c;“光伏储能”的组合&#xff0c;已成为行业发展的…

老生常谈!程序员为什么要阅读源代码?

大家好&#xff0c;我是码农先森。 阅读源码这是一个老生常谈的话题了&#xff0c;但又是很多人想做又没有付出行动的事情。前段时间我研究了 Swoole 的源代码&#xff0c;并且输出了系列的源码分析文章「感兴趣的朋友可以翻阅以前的文章」。虽然这个过程很枯燥和艰难&#xf…

c++ 6.11

作业&#xff1a; 思维导图&#xff1a; 作业题&#xff1a; 搭建一个货币的场景&#xff0c;创建一个名为 RMB 的类&#xff0c;该类具有整型私有成员变量 yuan&#xff08;元&#xff09;、jiao&#xff08;角&#xff09;和 fen&#xff08;分&#xff09;&#xff0c;并且…

VMware Workstation虚拟机进入U盘PE系统

注意事项 VMware Workstation虚拟机版本不能高于16.1.2版本&#xff01;&#xff01;&#xff01; 本实验使用的版本如下 实际操作 在已安装好的虚拟机处右键&#xff0c;点击设置。虚拟机安装win10教程请参考VMware Workstation安装win10操作系统-CSDN博客 在弹出的窗口点击…

卷产品 、卷生态,百度这款AI产品卷到了第一

万万没想到&#xff0c;最先跑出来的AI杀手级应用竟然是百度文库。 6月7日&#xff0c;“AI产品榜”&#xff08;aicpb.com&#xff09;发布了最新的5月国内总榜榜单&#xff0c;百度文库AI功能以6536万的月访问量一骑绝尘&#xff0c;连续两个月霸榜第一。 乍看有些不可思议&…

2-1基于matlab的拉普拉斯金字塔图像融合算法

基于matlab的拉普拉斯金字塔图像融合算法&#xff0c;可以使部分图像模糊的图片清楚&#xff0c;也可以使图像增强。程序已调通&#xff0c;可直接运行。 2-1 图像融合 拉普拉斯金字塔图像融合 - 小红书 (xiaohongshu.com)

docker安装elasticsearch8和kibana,带ik分词器

全文目录,一步到位 1.前言简介1.1 专栏传送门 2. elasticsearch和kibana安装2.1 准备工作2.1.1 下载elasticsearch2.1.2 下载kibana镜像 2.2 创建并运行es容器2.2.1 创建es网络2.2.2 创建es容器2.2.3 放行端口2.2.4 访问查看结果> 步骤一: 点击高级, 然后继续访问> 步骤二…

使用#sortablejs插件对表格中拖拽行排序#Vue3#后端接口数据

使用#sortablejs对表格中拖拽行排序#Vue3#后端接口数据 *效果&#xff1a; 拖动表格行排序 首先安装插件sortable npm install sortablejs --save代码&#xff1a; <template><!-- sortable.js 进行表格排序 --><!-- 演示地址 --><div class"dem…

我要成为算法高手-双指针篇

目录 什么是双指针?问题1&#xff1a;移动零问题2&#xff1a;复写零问题3&#xff1a;快乐数问题4&#xff1a;盛最多水的容器问题5&#xff1a;有效三角形个数问题6&#xff1a;查找总价格和为目标值的两个商品(两数之和)问题7&#xff1a;三数之和问题8&#xff1a;四数之和…

Nextjs 集成TinyMCE实现富文本编辑器

目录 一、导入依赖 二、动态导入 三、完整案例 四、参考文档 一、导入依赖 yarn add tinymce/tinymce-react二、动态导入 import dynamic from next/dynamic;const Editor dynamic(() > import(tinymce/tinymce-react).then(mod > mod.Editor),{ssr: false} ); 三…

力扣hot100:394. 字符串解码(递归/括号匹配,字符串之间相对顺序)

LeetCode&#xff1a;394. 字符串解码 本题容易想到用递归处理&#xff0c;在写递归时主要是需要明确自己的递归函数的定义。 不过我们也可以利用括号匹配的方式使用栈进行处理。 1、递归 定义递归函数string GetString(string & s,int & i); 表示处理处理整个numbe…

Django CreateView视图

CreateView是Django提供的一个基于类的视图&#xff0c;用于处理创建新对象的操作。它可以帮助你轻松地创建一个表单页面&#xff0c;用户可以通过这个页面创建新的对象。 1&#xff0c;添加视图 Test/app3/views.py from django.shortcuts import render# Create your views…