数据结构|排序总结(1)|直接插入排序

排序分类

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

选择排序:选择排序,堆排序

交换排序:冒泡排序,快速排序 

归并排序

插入排序

直接插入排序

        相当于摸牌,例如我们现在手上有{2,4,5,6}这些牌,当下一张是3的时候我们要将3插入到2和4当中,那么对于数组我们就要 把4,5,6 都往后挪,给3让出一个位置,这里演示以下往后挪的过程。

现有2,4,5,6

3先和6比,3应该放在6的前面,也就是3和6交换,交换后2,4,5,3,6

3再和5比,3应该放在5的前面,也就是3和5交换,交换后2,4,3,5,6

3再和4比,3应该放在4的前面,也就是3和4交换,交换后2,3,4,5,6

3再和2比,3应该放在2的后面,3本来就在2的后面,那就不用交换了,这就结束了

        很明显,这个要用到循环,既然用到,那么就要有结束条件--------插入的数大于前一个数。

        这个是一个,模拟的过程,但我们一般情况下遇到的都是一个固定长度的数组,也就是说,在不动空间的条件下只是比较交换。

        假设现在是这样的一个数组{ 2,3,1,4,2,5,2,0}我们可以先从第一2位置开始排,接着就是3,1,4...把他们放到该放的位置

先排2,结果如下

第一趟:2,3,1,4,2,5,2,0

在排3,和他前面的2进行比较,不用交换,结果如下:

第二趟:2,3,1,4,2,5,2,0

在排1,和前面的3进行比较,需要交换结果如下:

213,4,2,5,2,0

没有到达循环结束条件(插入的数大于前一个数)所以需要继续和前面的二进行比较,进行交换,结果如下:

1,2,3,4,2,5,2,0,交换后也没有到达循环结束条件,但是1的前面已经没有数了,这样也是结束了1的排序,所以上面的循环结束条件应该在加一个插入的数下标已经为0;因此第三趟排序结果为:

第三趟:1,2,3,4,2,5,2,0

剩下的数依次类推...

#include<iostream>
#include<vector>
using namespace std;
void swap(int& a, int& b)
{int tmp=a;a = b;b = tmp;}
int main()
{vector <int>arr = { 2,3,1,4,2,5,2,0};cout << "排序前:";for (int i = 0; i < arr.size(); i++)cout << arr[i] << ' ';for (int i = 1; i < arr.size(); i++)//i是要排的数{int t = i;for (int j = i - 1; j >=0; j--)//{if (arr[t] < arr[j]){swap(arr[t--], arr[j]);}elsebreak;}}cout << endl<<"排序后:";for (int i = 0; i < arr.size(); i++)cout << arr[i] << ' ';return 0;
}

时间复杂度分析

时间复杂度最差的时候:也就是 逆序的时候,下面是他们每次交换后的样子

#include<iostream>
#include<vector>
using namespace std;
void swap(int& a, int& b)
{int tmp=a;a = b;b = tmp;}
int main()
{vector <int>arr = {8,7,6,5,4,3,2,1,0};cout << "排序前:";for (int i = 0; i < arr.size(); i++)cout << arr[i] << ' ';cout << endl<<endl;for (int i = 1; i < arr.size(); i++)//i是要排的数{int t = i;for (int j = i - 1; j >=0; j--)//{if (arr[t] < arr[j]){swap(arr[t--], arr[j]);for (int i = 0; i < arr.size(); i++)cout << arr[i] << ' ';cout << endl;}elsebreak;}//cout <<"比较:"<<i<<"次"<<endl;cout << endl;}cout << endl<<"排序后:";for (int i = 0; i < arr.size(); i++)cout << arr[i] << ' ';return 0;
}

每次交换的次数类似一个等差数列,因此时间复杂度就是O(n^{2})

时间复杂度最好的时候也就是正序的时候,每次交换后如下图所示:

#include<iostream>
#include<vector>
using namespace std;
void swap(int& a, int& b)
{int tmp=a;a = b;b = tmp;}
int main()
{vector <int>arr = {0,1,2,3,4,5,6,7,8};cout << "排序前:";for (int i = 0; i < arr.size(); i++)cout << arr[i] << ' ';cout << endl<<endl;for (int i = 1; i < arr.size(); i++)//i是要排的数{int t = i;for (int j = i - 1; j >=0; j--)//{if (arr[t] < arr[j]){swap(arr[t--], arr[j]);for (int i = 0; i < arr.size(); i++)cout << arr[i] << ' ';cout << endl;}elsebreak;}cout <<"比较:"<<i<<"次"<<endl;//cout << endl;}cout << endl<<"排序后:";for (int i = 0; i < arr.size(); i++)cout << arr[i] << ' ';return 0;
}

可以看出就算本身是有序的,也得过一遍才可以,因此时间复杂度是O(n)

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

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

相关文章

MySql并发事务问题

事务 事务概念&#xff1a; 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 事务的特性&#xff1a;ACID&#xff1a; 小…

Qt元对象系统

第二章Qt元对象系统 文章目录 第二章Qt元对象系统1.什么是元对象&#xff1f;2.元对象系统组成3.信号与槽信号和槽的本质绑定信号与槽自定义槽定义槽函数必须遵循一下规则槽函数的类型自定义槽案例 自定义信号自定义信号需要遵循以下规则信号和槽重载二义性问题 4.内存管理1. 简…

Unity性能优化篇(十四) 其他优化细节以及UPR优化分析器

代码优化&#xff1a; 1. 使用AssetBundle作为资源加载方案。 而且经常一起使用的资源可以打在同一个AssetBundle包中。尽量避免同一个资源被打包进多个AB包中。压缩方式尽量使用LZ4&#xff0c;少用或不要用LZMA的压缩方式。如果确定后续开发不会升级Unity版本&#xff0c;则可…

【Java EE】初识Spring Web MVC

文章目录 &#x1f334;什么是Spring Web MVC&#xff1f;&#x1f338;什么是Servlet呢? &#x1f332;MVC 定义&#x1f338;再理解Spring MVC &#x1f333;如何学习Spring MVC呢&#xff1f;⭕总结 &#x1f334;什么是Spring Web MVC&#xff1f; Spring Web MVC 是基于…

《捕鱼_ue4-5输出带技能的透明通道素材到AE步骤》

《捕鱼_ue4-5输出带技能的透明通道素材到AE步骤》 2022-05-17 11:06 先看下带透明的特效素材效果1、首先在项目设置里搜索alpha&#xff0c;在后期处理标签设置最后一项allow through tonemapper2、在插件管理器中&#xff0c;搜索movie render &#xff0c;加载movie render q…

图论模板详解

目录 Floyd算法 例题&#xff1a;蓝桥公园 Dijkstra算法 例题&#xff1a;蓝桥王国 SPFA算法 例题&#xff1a;随机数据下的最短路问题 总结 最小生成树MST Prim算法 Kruskal算法 例题&#xff1a;聪明的猴子 Floyd算法 最简单的最短路径算法&#xff0c;使用邻接…

win10上一个详细的Django开发入门例子

1.Django概述 Django是一个开放源代码的Web应用框架&#xff0c;由Python写成。采用了MTV的框架模式&#xff0c;即模型M&#xff0c;视图V和模版T。 Django 框架的核心组件有&#xff1a; 用于创建模型的对象关系映射&#xff1b; 为最终用户设计较好的管理界面&#xff1b…

数学矩阵GCD和lCM(详解)

矩阵乘法 知阵乘法是《线性代数》中的基础内容&#xff0c;但在考察数学的算法题中也会出现。 本节我们学习基础的矩阵乘法规则。 每个矩阵会有一个行数和一个列数&#xff0c;只有当相乘的两个矩阵的左矩阵的列数等于右矩阵的行数 时&#xff0c;才能相乘&#xff0c;否则不允…

Rust---复合数据类型之枚举、数组

目录 枚举的使用Option 枚举数组的使用输出结果 枚举&#xff08;Enum&#xff09;&#xff1a;表示一个类型可以有多个不同的取值。枚举类型可以包含不同的变体&#xff08;variants&#xff09;&#xff0c;每个变体可以有不同的数据类型。 枚举的使用 enum Direction {Up,…

LeetCode-131. 分割回文串【字符串 动态规划 回溯】

LeetCode-131. 分割回文串【字符串 动态规划 回溯】 题目描述&#xff1a;解题思路一&#xff1a;回溯&#xff0c; 回溯三部曲解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个…

八股面试速成—Java语法部分

暑期实习面试在即&#xff0c;这几天八股和算法轮扁我>_ 八股部分打算先找学习视屏跟着画下思维导图&#xff0c;然后看详细的面试知识点&#xff0c;最后刷题 其中导图包含的是常考的题&#xff0c;按照思维导图形式整理&#xff0c;会在复盘后更新 细节研究侧重补全&a…

牛客NC181 单词拆分(一)【中等 动态规划,前缀树 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/c0d32c1ce5744472a01b2351a2c2767f 思路 前缀树动态规划参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规…

Docker、Kubernetes之间的区别

比较容器化工具&#xff1a;了解 Docker、Kubernetes 在应用程序部署和管理方面的差异。 基本概述 Docker 是一个流行的容器化平台&#xff0c;允许开发人员在容器中创建、部署和运行应用程序。 Docker 提供了一组工具和 API&#xff0c;使开发人员能够构建和管理容器化应用程…

C++输出格式控制

setprecision(n)可控制输出流显示浮点数的数字个数。C默认的流输出数值有效位是6&#xff0c;所以不管数据是多少&#xff0c;都只输出六位。如果setprecision(n)与setiosflags(ios::fixed)或者setiosflags(ios_base::fixed)合用&#xff0c;可以控制小数点右边的数字个数。set…

数据结构面试题报错调试方法记录

栈和队列报错调试 1.用栈实现队列 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 此题解题思路如下&#xff1a; 先将数据放在pushst栈里面&#xff0c;popst栈为空再把pushst栈里面的数据放进popst栈里面去&#xff0c;不为空则不执行。不为空时候直接拿取栈…

机器学习模型——关联规则

目录 关联规则 - 基本概念 关联规则的挖掘步骤: Apriori算法 Apriori算法简介&#xff1a; Apriori算法举例&#xff1a; Apriori算法优缺点&#xff1a; Apriori算法应用 FP-growth算法&#xff1a; FP-growth算法简介&#xff1a; FP-growth的数据结构&#xff1a; …

Mysql的基本命令

1 服务相关命令 命令描述systemctl status mysql查看MySQL服务的状态systemctl stop mysql停止MySQL服务systemctl start mysql启动MySQL服务systemctl restart mysql重启MySQL服务ps -ef | grep mysql查看mysql的进程mysql -uroot -hlocalhost -p123456登录MySQLhelp显示MySQ…

OLAP 和 OLTP

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 OLTP与OLAP的介绍OLTP&#xff08;on-line transaction processing&#xff09;&#xff1a;联机事务处理OLAP&#xff08;On-Line Analytical Processing&#xff…

Dockerd的使用

端口映射 存储卷 类似于mount&#xff0c;把真机的某个目录映射都容器里面 -v 选项可以有多个 利用存储卷修改配置文件 容器间网络模式 共享网络为 --networkcontainer&#xff1a;容器名 微服务架构 一种由容器为载体&#xff0c;使用多个小型服务组合来构建复杂的架构为…

【可靠性】陷阱电荷对TDDB影响的多尺度模拟

【From Accelerated to Operating Conditions: How Trapped Charge Impacts on TDDB in SiO2 and HfO2 Stacks】 文章总结&#xff1a; 本研究深入探讨了在SiO2和HfO2介质堆叠中&#xff0c;陷阱电荷对时间依赖介电击穿&#xff08;TDDB&#xff09;现象的影响。通过引入载流子…