十大排序总结之——冒泡排序、插入排序

同样,这两几乎也是被淘汰了的算法,尽管它们是稳定的,但是时间复杂度没人喜欢,了解一下就好,没啥好说的,注意最后一句话就行了

一,冒泡排序

1. 算法步骤

共n-1趟,谁两敢冒泡就换了谁两

第一趟,比较n-1次,每个相邻的位置都比较一次,比较两个元素大小,若位置反了就交换位置,一趟结束,最后一个位置就是最大值(降序就是最小值)

第二趟,比较n-2次,同上,最后一个元素不参与比较

第三趟,比较n-1次,同上,最后两个元素不参与比较

……

第n-1趟,比较1次,同上,最后n-2个元素不参与比较

一共比较累 1+2+3+……n-1 = (1 + n-1)*(n-1) / 2 = 1/2 * ( n^2 - n) ,比选择排序的n^2好一点点呵,然并……

2. 动图演示

3. 什么时候最快

当输入的数据已经是正序时(都已经是正序了,我还要你冒泡排序有何用啊)。

4. 什么时候最慢

当输入的数据是反序时(写一个 for 循环反序输出数据不就行了,干嘛要用你冒泡排序呢,我是闲的吗)。

5、代码


template<typename T> void bubble_sort(T arr[], int len) {int i, j;for (i = 0; i < len - 1; i++)for (j = 0; j < len - 1 - i; j++)if (arr[j] > arr[j + 1])swap(arr[j], arr[j + 1]);
}

二、插入排序

1. 算法步骤

共n-1趟,把每一个元素都插入到(理论上)原本该在的位置上去

第一趟,把第一个元素看成已经排序好了的序列,用第2个元素来与之比较,比它大就插入到第一个后面,比它小就插入到它前面 (比较1次)

第二趟,把前2个元素看成已经排序好了的序列,用第3个元素来与前面的元素逐个比较,比某个比较元素大就插入到它后面,比它小就继续比较再前一个,若直到比第一个还小,就插入到第一个的位置(比较 1~2次)

第三趟,把前3个元素看成已经排序好了的序列,用第4个元素来与前面的元素逐个比较,比某个比较元素大就插入到它后面,比它小就继续比较再前一个,若直到比第一个还小,就插入到第一个的位置(比较1~3次)

………………………………

第n-1趟,把前n-1个元素看成已经排序好了的序列,最后 1 个元素来与前面的n-1元素逐个比较,比某个比较元素大就插入到它后面,比它小就继续比较再前一个,若直到比第一个还小,就插入到第一个的位置(比较1~n-1)

比冒泡排序更好一点了,

2. 动图演示


代码实现

void insertion_sort(int arr[],int len){for(int i=1;i<len;i++){int key=arr[i];int j=i-1;while((j>=0) && (key<arr[j])){arr[j+1]=arr[j];j--;}arr[j+1]=key;}
}

特别注意:

之所以说只说是几乎被淘汰了,而不是完全淘汰,是因为这两哥们的最好情况是O(n),还都是稳定的排序方法,在元素大部分都是有序的,只有极个别的位置错了的情况下,这两个算法的优势就来了,特别是插入排序,本来就是逐个插入到正确的位置上去,现在大部分都是有序的,这部相当于大部分都插入好了嘛,就剩下极个别插入一下就完事了对吧,这是其他任何排序算法都无法比拟的存在

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

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

相关文章

十四:爬虫-Redis基础

1、背景 随着互联网大数据时代的来临&#xff0c;传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力&#xff0c;来解决系统性能上的瓶颈。 2、redis是什么 Redis 全称 Remote Dictio…

HarmonyOS4.0系统性深入开发10卡片事件能力说明

卡片事件能力说明 ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互&#xff0c;当前支持router、message和call三种类型的事件&#xff0c;仅在卡片中可以调用。 接口定义&#xff1a;postCardAction(component: Object, action: Object): void 接口…

建模杂谈系列236 Block Manager

说明 很久没有写了&#xff0c;总是写一半就没空往下写。这次正好有个单独的主题&#xff0c;可以写一下。 内容 1 块的分配 数据应该怎么切分和管理&#xff1f;这没有一个固定的答案&#xff0c;在我的实践中&#xff0c;我觉得一个块(Block)一万条记录是比较合理的。然后…

Android App从备案到上架全过程

不知道大家注意没有,最近几年来,新的移动App想要上架是会非常困难的,并且对于个人开发者和小企业几乎是难如登天,各种备案和审核。但是到底有多难,或许只有上架过的才会有所体会。 首先是目前各大应用市场陆续推出新的声明,各种备案截止日期到12月就要到最后期限责令整改…

docker实战:安装redis

目录 1、查看可用的版本2、拉取最新版的镜像3、查看本地镜像4、运行容器5、测试redis 服务6、清理容器 1、查看可用的版本 使用 docker search命令可以查看容器的可用版本&#xff0c;使用–limit可以设置输出的结果数量 [rootlocalhost docker]# docker search redis NAME …

文本分类应用到工作实践

日常工作中会用到文本分类,如果量比较少人工分类一下也可实现,但是准确率不是很高。如果量多就需要用到NLP相关功能。直接上代码实践。 运行环境:python3 paddlepaddle2.5.0 加载数据集 # 加载当前数据集 cd /home/aistudio/data/data238254/安装组件 # 安装组件 pip ins…

Debezium发布历史41

原文地址&#xff1a; https://debezium.io/blog/2018/10/04/debezium-0-9-0-alpha2-released/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 0.9.0.Alpha2 发布 2018 年 10 月 4 日 作者&#xff1a…

191.【2023年华为OD机试真题(C卷)】亲子游戏(DFS和BFS—JavaPythonC++JS实现)

请到本专栏顶置查阅最新的华为OD机试宝典 点击跳转到本专栏-算法之翼:华为OD机试 🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,深度掌握! 文章目录 【2023年华为OD机试真题(C卷)】亲子游戏(DFS和BFS—…

Python使用余弦相似度比较两个图片

为了使用余弦相似度来找到与样例图片相似的图片&#xff0c;我们需要先进行一些预处理&#xff0c;然后计算每两张图片之间的余弦相似度。以下是一个简单的实现&#xff1a; 读取样例图片和目标文件夹中的所有图片。对每张图片进行预处理&#xff0c;例如灰度化、降噪等。计算…

『OPEN3D』1.12 RGBD三维重建

目录 一、流程准备 1、数据集准备 2、重建参数配置 3、代码运行 二、代码解析</

shell case判断的实际应用

简介 case语句是一种多路分支结构&#xff0c;用于根据变量的值来判断执行不同的命令。作用与 if 有着异曲同工之妙&#xff0c;在某些地方比 if 可能更加好用&#xff0c;这里就介绍一些 case 的用法与实践&#xff0c;if 的详细方法见另一篇文章&#xff1a;shell if判断的应…

我的机器学习起步如何Getting Started

学习技巧和原则 先通过经典书籍进行科普知名机器学习网站根据书籍或网站的目录&#xff0c;先泛读、再选择有兴趣的部分重点精读、后至于反复读知行合一 起步Getting Started 周志华版《机器学习》&#xff0c;又名西瓜书 可以作为科普书籍&#xff0c;需要主动略过对于理论…

27、web攻防——通用漏洞SQL注入Tamper脚本Base64Jsonmd5

文章目录 数字型&#xff1a;0-9。http;//localhost:8081/blog/news.php?id1 字符型&#xff1a;a-z、中文&#xff0c;需要闭合符号。http;//localhost:8081/blog/news.php?idsimple 搜索型&#xff1a;在字符型的基础上加入了通配符%。http;//localhost:8081/blog/news.…

问界M9激光雷达解说

什么是激光雷达 激光雷达(英文:Lidar),是一种通过发射激光束来测量目标位置、速度等特征量的雷达系统。其工作原理是将激光光束照射到目标物体上,然后通过测量激光光束从发射到反射回来的时间,来计算目标物体的距离、位置、速度等参数。激光雷达通常用于测量地形、地貌、…

js常用事件演示

为什么要使用js事件&#xff1a; JavaScript事件是非常重要的&#xff0c;因为它们提供了与用户交互和处理用户操作的能力。以下是一些使用JavaScript事件的原因&#xff1a; 交互性&#xff1a;使用JavaScript事件可以实现各种交互功能&#xff0c;例如点击按钮、移动鼠标、按…

考研用什么光源比较好?五款好用台灯推荐

人眼对光是非常敏感的&#xff0c;特别是儿童青少年眼睛还在发育的状态来说&#xff0c;光线是至关重要的&#xff0c;于是这次测评就不能马虎&#xff0c;必须要本着专业严谨的态度进行测评&#xff0c;这次测评呢就花了不少钱买下了现在市面上热度很高、或是较有名气的专业款…

超维空间S2无人机使用说明书——53、进阶版——添加滤波后使用PID算法进行基于yolo的目标跟踪

引言&#xff1a;为了提高识别效果&#xff0c;采用递推均值滤波的算法对图像返回的识别准确度和位置信息进行处理&#xff0c;在实际应用过程中有着不错的表现。本小节内容是在52小节的基础上进行优化&#xff0c;可以先参考52小节&#xff0c;在此基础上再参考此处代码即可。…

LeetCode刷题--- 第 N 个泰波那契数

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…

男女婚姻配对中若男孩有金钱和长相帅气是容易成功的因素分析

男女婚姻配对中若男孩有金钱和长相帅气是容易成功的因素分析。 男人想要脱离单身主要考虑哪些因素、提升哪些方面。 首先&#xff0c;你要清楚&#xff0c;女人喜欢什么&#xff0c;你和她能长久在一起的概率是多少&#xff1f; 直白的说&#xff0c;女人&#xff0c;就是喜欢…

算法通关村第二十关-黄金挑战图的常见算法

大家好我是苏麟 , 今天聊聊图的常见算法 . 图里的算法是很多的&#xff0c;这里我们介绍一些常见的图算法。这些算法一般都比较复杂&#xff0c;我们这里介绍这些算法的基本含义&#xff0c;适合面试的时候装*&#xff0c;如果手写&#xff0c;那就不用啦。 图分析算法&#xf…