排序算法-插入排序法(InsertSort)

news2024/11/17 16:21:50

 排序算法-插入排序法(InsertSort)

1、说明

插入排序法是将数组中的元素逐一与已排序好的数据进行比较,先将前两个元素排序好,再将第三个元素插入适当的位置,也就是说这三个元素仍然是已排序好的,接着将第四个元素加入,重复此步骤,直到排序完成为止。可以看作是在一串有序的记录R1,R2,...,Ri中插入新纪录R,使得i+1个记录排序妥当。

2、算法分析

  1. 最坏情况和平均情况均需比较:(n-1)+(n-2)+(n-3)+...+3+2+1=\frac{n(n-1)}{2}次,时间复杂度为O(n^{2})。最好情况时间复杂度为O(n)
  2. 插入排序是稳定排序法。
  3. 因为只需一个额外的空间,所以空间复杂度为最佳。
  4. 这种排序法适用于大部分数据已经过排序的情况,也适用于往已排序数据库中添加新数据后再进行排序的情况。
  5. 由于插入排序法会造成数据的大量搬移,因此建议在链表上使用。

3、C++代码 

#include<iostream>
using namespace std;

int main() {

	int data[6] = { 9,7,5,3,4,6 };

	cout << "原始数据:" << endl;
	for (int i = 0; i < 6; i++) {
		cout << data[i] << "  ";
	}
	cout << endl;

	int i;
	int j;
	//第1次:
	//7  9  5  3  4  6
	//第2次:
	//5  7  9  3  4  6
	//第3次:
	//3  5  7  9  4  6
	//第4次:
	//3  4  5  7  9  6
	//第5次:
	//3  4  5  6  7  9
	for (i = 1; i < 6; i++) {
		int temp = data[i];
		j = i - 1;
		//temp > data[j]	从大到小排序的条件
		//temp < data[j]	从小到大排序的条件
		while (j >= 0 && temp < data[j]) {
				data[j + 1] = data[j];
				j--;
		}
		data[j + 1] = temp;
	}

	cout << "最终数据:" << endl;
	for (int i = 0; i < 6; i++) {
		cout << data[i] << "  ";
	}
	cout << endl;

	return 0;
}

输出结果 

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

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

相关文章

bootz启动 Linux内核过程总结

一. bootz启动Linux uboot 启动 Linux内核使用bootz命令。当然还有其它的启动命令&#xff0c;例如&#xff0c;bootm命令等等。 前面几篇文章分析 bootz命令启动 Linux内核的过程中涉及的几个重要函数。 bootz启动 Linux内核过程中涉及的全局变量images_凌肖战的博客-CSDN博…

3d tiles规范boundingVolume属性学习

3d tiles的瓦片&#xff08;Tiles&#xff09;包含一些属性&#xff0c;其中第一项是boundingVolume&#xff1b;下面学习boundingVolume&#xff1b; boundingVolume&#xff0c;这个翻译为边界范围框&#xff0c;如果直译为边界体积可能有问题&#xff0c;其实就是包围盒的意…

Matlab提取colormap

文章目录 简介Matlab代码 简介 使用Maltab依据截取的图片信息&#xff0c;提取colormap&#xff0c;供保存使用 Matlab代码 提取函数 function colormap_outExtract_Colormap(inputfig, colormapsize)% Creat a colormap array from the input figure. % The figure is a c…

虹科科技 | 探索CAN通信世界:PCAN-Explorer 6软件的功能与应用

CAN&#xff08;Controller Area Network&#xff09;总线是一种广泛应用于汽车和工业领域的通信协议&#xff0c;用于实时数据传输和设备之间的通信。而虹科的PCAN-Explorer 6软件是一款功能强大的CAN总线分析工具&#xff0c;为开发人员提供了丰富的功能和灵活性。本文将重点…

刷题用到的非常有用的函数c++(持续更新)

阅读导航 字符串处理类一、stoi()&#xff08;将字符串转换为整数类型&#xff09;二、to_string()&#xff08;将整数类型转换为字符串类型&#xff09;三、stringstream函数&#xff08;将一个字符串按照指定的分隔符进行分词&#xff09; 字符串处理类 一、stoi()&#xff…

ChatGPT AIGC 高效办公自动化案例

根据业务员姓名查找对应月份的科目成绩。 我们让ChatGPT AIGC来完成Excel公式。 Prompt:有一个表格A列为姓名,B列为语文,C列为数学,请根据J2单元格的姓名 ,查找出对应的数学成绩,请写出函数来完成 将生成的vlookup函数公式=VLOOKUP(J2, A:C, 3, FALSE)复制到表格中进行验…

[开源]基于流程编排的自动化测试工具,插件驱动,测试无限可能

一、开源项目简介 流程编排&#xff0c;插件驱动&#xff0c;测试无限可能 一款基于流程编排的自动化测试工具 二、开源协议 使用Apache-2.0开源协议 三、界面展示 四、功能概述 在软件开发旅程中&#xff0c;测试流程的管理和执行常常是复杂且耗时的挑战。传统测试工具主…

c++ 类的特殊成员函数:移动构造函数(五)

1. 简介 移动构造函数是C11中的新特性&#xff0c;它允许对象通过移动而不是复制来传递和初始化。移动构造函数通常用于提高性能&#xff0c;因为它避免了不必要的复制操作&#xff0c;特别是当处理大型对象或使用动态内存分配时。 2. 来源 当拷贝构造函数出现函数返回值 &a…

kafka广播消费组停机后未删除优化

背景 kafka广播消息的时候为了保证groupId不重复&#xff0c;再创建的时间采用前缀时间戳的形式&#xff0c;这样可以保证每次启动的时候是创建的新的&#xff0c;但是 会出现一个问题&#xff1a;就是每次停机或者重启都会新建一个应用实例&#xff0c;关闭应用后并不会删除…

如何调整 Kubernetes StatefulSet 卷的大小

Kubernetes StatefulSet用于在集群内部署有状态应用程序。StatefulSet 中的每个 Pod 都可以访问即使在重新调度后仍坚持使用的本地持久卷。这使得 Pod 能够维护与其集合中的邻居不同的单独状态。 不幸的是,这些卷有一个很大的限制:Kubernetes 没有提供从 StatefulSet 对象调整…

排序算法-冒泡排序法(BubbleSort)

排序算法-冒泡排序法&#xff08;BubbleSort&#xff09; 1、说明 冒泡排序法又称为交换排序法&#xff0c;是从观察水中的气泡变化构思而成的&#xff0c;原理是从第一个元素开始&#xff0c;比较相邻元素的大小&#xff0c;若大小顺序有误&#xff0c;则对调后再进行下一个…

排序算法-选择排序法(SelectionSort)

排序算法-选择排序法&#xff08;SelectionSort&#xff09; 1、说明 选择排序法也是枚举法的应用&#xff0c;就是反复从未排序的数列中取出最小的元素&#xff0c;加入另一个数列中&#xff0c;最后的结果即为已排序的数列。选择排序法可使用两种方式排序&#xff0c;即在所…

基于nodejs+vue驾校预约管理系统

通过科技手段提高自身的优势&#xff1b;对于驾校预约管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了驾校预约管理系统&#xff0c; 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;驾校预约管理系统&am…

【Rust】包和模块,文档注释,Rust格式化输出

文章目录 包和模块包 CrateRust 的标准目录结构 模块 Module用路径引用模块使用super引用模块使用self引用模块结构体和枚举的可见性 使用 use 引入模块及受限可见性基本引入方式绝对路径引入模块相对路径引入模块中的函数 避免同名引用 注释和文档文档注释包和模块级别的注释注…

conda: error: argument COMMAND: invalid choice: ‘activate‘

参考:https://github.com/conda/conda/issues/13022 输入后重启terminal即可

Spring Boot 开发环境热部署

Spring Boot 项目无法像前端项目那样&#xff0c;修改源代码后刷新网页就能即时看到效果&#xff0c;需要先暂停运行&#xff0c;再重新启动&#xff0c;最后刷新网页。 为了避免这一麻烦的操作&#xff0c;我们可以设置热部署&#xff0c;启动服务后不论怎么修改源码&#xf…

NodeJs中使用JSONP和Cors实现跨域

跨域是为了解决浏览器请求域名&#xff0c;协议&#xff0c;端口不同的接口&#xff0c;相同的接口是不需要实现跨域的。 1.使用JSONP格式实现跨域 实现步骤 动态创建一个script标签 src指向接口的地址 定义一个函数和后端调用的函数名一样 实现代码 -- 在nodejs中使用http内…

【Mysql】重新认识mysql(一)

参考Mysql是怎么运行的&#xff0c;并结合实际的工作经验对mysql的知识进行总结。 Mysql架构 从大体上来说&#xff0c;Mysql是C/S架构。以我们平时使用的QQ为例&#xff0c;它其实是由两部分组成的&#xff0c;一部分是客户端程序,&#xff0c;一部分是服务器程序。客户端可…

【深蓝学院】手写VIO第6章--视觉前端--作业(SVD分解部分复习)

0. 题目 T1. 奇异值分解需要补&#xff0c;看这篇博客&#xff0c;讲的很好。 总结一下&#xff0c;关于奇异值分解(Singular Value Decomposition&#xff0c;SVD )有以下内容摘抄自该博客&#xff0c;关于SDV分解的部分应该是摘自李航《统计学习方法里面的》&#xff1a; 1…

互联网性能和可用性优化CDN和DNS

当涉及到互联网性能和可用性优化时&#xff0c;DNS&#xff08;Domain Name System&#xff09;和CDN&#xff08;Content Delivery Network&#xff09;是两个至关重要的元素。它们各自发挥着关键作用&#xff0c;以确保用户能够快速、可靠地访问网站和应用程序。在本文中&…