插入排序

基本思想

每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。

C++代码实现

//插入排序
void insertionSort(vector<int>& v)
{
	int tmp = 0;
	int i = 1, j = 0;		//从1开始比较是将第一个元素是有序的
	for (; i < v.size(); i++)
	{
		tmp = v[i];	//待排序元素
		j = i - 1;
		for (; j >= 0 && tmp < v[j]; j--)
		{
			//当前为排序元素比有序序列中的元素小,则有序序列元素后移一位
			v[j + 1] = v[j];
		}
		//当前为排序元素>= 有序序列元素或j < 0时,将未排序元素插入到该元素后面或有序序列头部
		v[j + 1] = tmp;
	}
}

排序过程

以[2, 2, 5, 1, 3] 为例,黑色加粗的2用来判断算法的稳定性。

第一轮排序,有序序列为[2], 无序序列为[2, 5, 1, 3]。
取无序序列中的第一个元素tmp = v[i] = 2(i = 1)与有序序列中的元素比较。
①j = 0, tmp >= v[j], 不执行循环体退出内层循环
j = -1 < 0, 将无序元素放入有序序列中第一个<= tmp 的元素后面,v[j + 1] = tmp。
第一轮排序结束,得到排序结果,有序序列更新为[2, 2],无序序列更新为[5, 1, 3]。这里可以发现黑色加粗的2依旧在未加粗的2前面。

第二轮排序,tmp = v[i] = 5(i = 2)
①tmp > v[j], 不执行循环体退出内层循环
将当前元素放入有序序列后面,即v[j + 1] = tmp。
第二轮排序结束,得到排序结果,有序序列更新为[2, 2, 5], 无序序列更新为[1, 3]

第三轮排序,tmp = v[i] = 1(i = 3)
①tmp < v[j] = 5, v[j] 后移一位, v[j + 1] = v[j], j-- = 1
②tmp < v[j] = 2, v[j] 后移一位, v[j + 1] = v[j], j-- = 0
③tmp < v[j] = 2, v[j] 后移一位, v[j + 1] = v[j], j-- = -1, 退出内层循环
将当前元素放到有序序列后面,即v[j + 1] = tmp。
第三轮排序结束,得到排序结果,有序序列更新为[1, 2, 2, 5], 无序序列更新为[3]

第四轮排序, tmp = v[i] = 3(i = 4)
①tmp < v[j] = 5, v[j] 后移一位, v[j + 1] = v[j], j-- = 2
②tmp > v[j] = 2, 退出内层循环
将当前元素放到有序序列后面,即v[j + 1] = tmp。
第四轮排序结束,有序序列更新为[1, 2, 2, 3, 5], 无序序列更新为[], 所以无序元素全部插入完毕,完成整体排序。

时间复杂度

可以发现在插入过程中的比较次数在区间[1, n - 1] 内,下面分析这两端的情况。

最好情况:
当待排序数组是有序时,是最优的情况。

只需当前数跟前一个数比较一下就可以了,这时整体排序一共需要比较n - 1次,最好时间复杂度为O(n)

最坏情况:
是待排序数组是逆序的,此时需要比较次数最多,总次数记为:1+2+3+…+N-1,所以,插入排序最坏情况下的时间复杂度为O(n2)

综上插入排序的平均复杂度为O(n2)。

因而,插入排序不适合对于数据量比较大的排序应用。

但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。

空间复杂度

排序过程中我们只用到3个临时的变量,且不随数据规模n的变化而变化,所以整体空间复杂度为O(1)

算法稳定性

因为交换元素时,可以在相等的情况下做出不移动的限制,例上面黑色加粗的2和未加粗的2的相对位置并没有发生改变,所以归并排序是稳定的

数据治理是确保数据准确性、可靠性、安全性、可用性和整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值