首页 > 其他分享 >数据结构6.1--插入排序

数据结构6.1--插入排序

时间:2024-12-06 23:32:18浏览次数:5  
标签:tmp end -- 插入排序 gap int 6.1 排序

目录

1.基本思想

1.2直接插入排序

1.3希尔排序(缩小增量排序)


1.基本思想

直接插入排序是一种简单的插入排序法,其基本思想是:

把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。

实际中我们玩扑克牌,就用了插入排序的思想

1.2直接插入排序

直接插入排序的特性总结:

  1. 元素结合越接近有序,直接插入排序算法的时间效率越高
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1),它是一种稳定的排序算法
  4. 稳定性:稳定
//直接插入排序(以升序为例)
//时间复杂度:最好O(N^2)逆序
//           最坏O(N)  顺序有序 
void InsertSort(int* a, int n)
{
	for (int i = 0; i < n-1; i++)
	{
		int end = i;
		int tmp = a[i + 1];
		while (end >= 0)
		{
			if (tmp < a[end])
			{
				a[end + 1] = a[end];
				end--;
			}
			else
			{
				break;
			}
		}
		a[end + 1] = tmp;
	}
	return;
}

1.3希尔排序(缩小增量排序)

希尔排序又称缩小增量法。希尔排序法的基本思想是:

先选定一个整数gap,把待排序文件中所有记录分成个组,所有距离间隔gap的数就为一个同一小组。对每一个小组内的数进行排序。然后,取,重复上述分组和排序的工作。当gap==1时,所有小组和在一起统一排序

void ShellSort(int* a, int n)
{
	int gap = n;
	while (gap > 1)
	{
		gap /= 2;        //gap == 1直接排序;gap > 1预排序
		for (int i = 0; i < n - 1; i += gap)
		{
			int end = i;
			int tmp = a[i + gap];
			while (end >= 0)
			{
				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					end -= gap;
				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
	}
}

gap越大,跳得最快,越不接近有序

gap越小,跳得最慢,越接近有序

希尔排序的特性总结:

  1. 希尔排序是对直接插入排序的优化。
  2. 当gap>1时都是预排序,目的是让数组更接近有序。当gap == 1时,数组已经比较接近有序了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。
  3. 希尔排序的时间复杂度不好算,因为gap的取值方法很多。我们刚刚也可以gap =gap / 3 +1,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定

标签:tmp,end,--,插入排序,gap,int,6.1,排序
From: https://blog.csdn.net/2301_78702440/article/details/144301629

相关文章

  • 数据结构5——二叉树
    走上计算机的道路,疲惫和无力会不断向你袭来。虽途艰路险,然功成之日,往昔困厄皆为序章,亦足慰心怀,堪称圆满。目录1.树概念及结构1.1树的概念1.2树的相关概念1.3树的表示1.4树在实际中的运用(表示文件系统的目录树结构)2.二叉树概念及结构2.1概念2.2现实中的二叉树2.3特......
  • Markdown语法详解
    Markdown语法详解1.标题标题前加#+空格,按回车,几级标题就加几个#,共6级一级标题#一级标题二级标题##二级标题三级标题###三级标题四级标题####四级标题五级标题#####五级标题六级标题######六级标题2.字体加粗:字体前后各两个*例如:字体斜体:字体前后各一个*例如:字......
  • 模型 正则化方法(通俗解读)
    系列文章分享 模型,了解更多......
  • 大数据学习案例——词频统计
    目录1.准备文本数据2.创建目录3.上传文件4.查看文件是否上传成功5.运行MapReduce程序6.查看统计结果掌握Hadoop的案例操作,能够在Hadoop中运行MapReduce程序接下来,通过一个词频统计案例体验Hadoop集群的使用,本案例要统计的是文本文件中每个单词出现的次数。1.准备文......
  • 电动汽车制造执行系统(MES)软件:GE Digital EV二次开发_(10).系统集成:MES与其他制造系统
    系统集成:MES与其他制造系统的接口开发在电动汽车制造过程中,制造执行系统(MES)作为生产管理的核心系统,需要与多种其他制造系统进行高效的数据交换和业务协同。这些系统包括但不限于生产计划系统(APS)、企业资源规划系统(ERP)、供应链管理系统(SCM)、质量管理系统(QMS)以及自动化设备(......
  • 电动汽车制造执行系统(MES)软件:GE Digital EV二次开发_(19).部署与运维:MES系统上线后的
    部署与运维:MES系统上线后的管理与维护在电动汽车制造执行系统(MES)软件上线后,管理和维护是确保系统稳定运行、高效生产的关键环节。这一节将详细探讨MES系统上线后的管理与维护,包括系统监控、故障排除、性能优化、数据备份与恢复、系统升级和安全管理等方面的内容。系统监......
  • 电动汽车制造执行系统(MES)软件:GE Digital EV二次开发_(20).持续改进:MES系统在电动汽车
    持续改进:MES系统在电动汽车制造中的迭代升级在电动汽车制造过程中,制造执行系统(MES)的持续改进是确保生产效率、质量控制和数据分析的关键。本节将详细介绍MES系统在电动汽车制造中的迭代升级原理和具体实践,包括需求分析、功能优化、系统集成和测试验证等关键步骤。1.需求......
  • 【C++算法】31.前缀和_连续数组
    文章目录题目链接:题目描述:解法C++算法代码:图解题目链接:525.连续数组题目描述:解法前缀和思想:如果把0变成-1,那么就是在区间内找一个最长的子数组,使得子数组中所有元素的和为0前面做过一个前缀和为k的子数组,这里就是转化为和为0。前缀和+哈希表哈希表里......
  • 【C++算法】32.前缀和_矩阵区域和
    文章目录题目链接:题目描述:解法C++算法代码:题目链接:1314.矩阵区域和题目描述:解法防止有人看不明白题目,先解释一下题目二维前缀和思想:使用前缀和矩阵ret=[x1,y1]~[x2,y2]=D=(A+B+C+D)-(A+B)-(A+C)+A=dp[x2,y2]-dp[x1-1,y2]-dp[x2,y1-1]+dp[x......
  • 云服务器上的域名解析与备案全流程指南
    在部署网站时,云服务器与域名是两个不可缺少的重要元素。为了让用户能够通过域名访问你的网站,你需要完成域名解析和网站备案的流程。域名解析将域名与云服务器的IP地址相对应,而备案是中国大陆地区网站上线前的必备流程。本文将详细介绍在云服务器上进行域名解析和备案......