直接插入排序--C语言(附详细代码)(附图详解)

news2024/11/16 11:54:33

目录

插入排序法的介绍

什么是插入排序法?

稳定性分析

插入排序基本思想

例子分析

实现代码

运行结果


插入排序法的介绍

什么是插入排序法?

插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法  。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动

稳定性分析

如果待排序的序列中存在两个或两个以上具有相同关键词的数据,排序后这些数据的相对次序保持不变,即它们的位置保持不变,通俗地讲,就是两个相同的数的相对顺序不会发生改变,则该算法是稳定的;如果排序后,数据的相对次序发生了变化,则该算法是不稳定的。关键词相同的数据元素将保持原有位置不变,所以该算法是稳定的;

插入排序基本思想

插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序;

如图

例子分析

如对数列     5  2  4  1   插入排序

第一次:用数列下标为1的数  25比较,5>2,所以交换位置,数列变为   2  5   4   1

第一次后的数列为     2   5    4   1

第二次:然后下标增加,用下标为2的数 45比较,4<5,所以交换位置,变为  2  4  5  1   ,然后42比较,4>2,不用交换;

第二次后的数列 为    2   4    5   1

第三次:用下标为3的数 15比较,5>1,所以交换,变为   2   4   1    5,然后14比较,4>1,交换,变为  2     1      4      5,再用12比较,2>1,交换,变为  1    2     4     5;

最后排完数列变为    1    2   4   5


实现代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

void Print(int arr[], int n)
{
	int i = 0;
	for (i = 0; i < n; i++)
	{
		printf("%d ",arr[i]);      //结果打印函数
	}
	printf("\n");
}
void Sort_arr(int arr[],int n)     //排序的函数   
{
	int tmp = 0;
	int i = 0;
	int j = 0;
	for (i = 1; i < n; i++)
	{
		tmp = arr[i];
		for (j = i - 1; j >= 0; j--)
		{
			if (tmp > arr[j])
			{
				break;
			}
			else
			{
				arr[j + 1] = arr[j];
			}
		}
		arr[j+1] = tmp;
		Print(arr, 10);          //打印排序过程
	}
}

int main()
{
	int a[10] = { 12,18,2,6,21,8,10,-6,11,9};
	Sort_arr(a, 10);
	Print(a,10);

	return 0;
}

运行结果

 


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

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

相关文章

Django-3.2-LTS兼容哪些Python版本?支不支持Python3.9.10?

问&#xff1a;请问Python的3.9.10版本兼不兼容Django的3.2版&#xff1f; 答&#xff1a;Python 3.9.10 和 Django 3.2 之间是兼容的。Django 3.2 是一个长期支持&#xff08;LTS&#xff09;版本&#xff0c;它支持 Python 3.6、3.7、3.8 和 3.9。因此&#xff0c;Python 3.9…

母线差动保护(二)

3、大差和小差 接入大差元件的电流为I母、II母所有支路&#xff08;母联除外&#xff09;的电流&#xff0c;目的是为了判断故障是否为母线区内故障&#xff1b;接入小差元件的电流为接入该段母线的所有支路的电流&#xff0c;目的是为了判断故障具体发生在哪一条母线上。 以双…

ifconfig: RX packets 一直为 0

本博客的很多内容都是经验之谈&#xff0c;目的是给遇到类似问题的小伙伴提供一个解决问题的思路&#xff0c;如果试了不行&#xff0c;可以快速跳过&#xff0c;再寻找其他的解决方案。 如题目所言&#xff0c;今天遇到的问题是和网络连通性相关的&#xff0c;就是网络不通&a…

为什么企业推行OEE总是坚持不下去?

OEE很难推行吗&#xff1f; 企业追求高效率和减少浪费变得尤为重要&#xff0c;而在这个过程中&#xff0c;OEE&#xff08;Overall Equipment Efficiency&#xff09;成为了一个非常有用的工具&#xff0c;它可以为企业提供准确的数据&#xff0c;了解生产过程中存在的浪费程…

AttributeError: module ‘numpy‘ has no attribute ‘typeDict‘

问题描述&#xff1a;运行一个网上下载的PyQt5代码&#xff0c;出现了AttributeError: module numpy has no attribute typeDict的错误。具体如下&#xff1a; Traceback (most recent call last):File "F:/PyQt5/Javacr/main.py", line 16, in <module>from …

面向对象的介绍和内存

学习面向对象内容的三条主线 • Java 类及类的成员&#xff1a;&#xff08;重点&#xff09;属性、方法、构造器&#xff1b;&#xff08;熟悉&#xff09;代码块、内部类 • 面向对象的特征&#xff1a;封装、继承、多态、&#xff08;抽象&#xff09; • 其他关键字的使用…

3 个技巧,让你像技术专家一样解决编码问题

「我应该如何提高解决问题的能力&#xff1f;尽管我掌握了 JavaScript&#xff0c;却无法解决实际问题或理解复杂的 JavaScript 代码。」 经常有年轻的开发者朋友问我类似的问题。对开发者来说&#xff0c;解决问题非常重要。编写优秀的代码是一门创造性的艺术&#xff0c;而要…

Linux第二章之基本指令

目录 第一章、基本指令 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令&#xff08;重要&#xff09; 06.rmdir指令 && rm 指令&#xff08;重要&#xff09; 07.man指令&#xff08;重要&#xff09; 08.cp指令&#xff08;重要&#xff0…

【性能测试系列】JMeter核心技术:分布式压测和参数化

JMeter分布式压测 为什么要做分布式部署? 在上一篇文章中&#xff0c;我们提到了JMeter的线程启动和运行&#xff0c;是会占用系统资源的&#xff0c;一旦需要大并发&#xff0c;而JMeter单机部署配置不够&#xff0c;将会导致JMeter无法在规定时间内启动对应的线程数&#x…

OpenCV项目开发实战--对图像进行非真实感渲染-附Python、C++的代码实现

编写一个过滤器来创建如上所示的风格化/卡通化图像,OpenCV 3 中边缘保留过滤的非常快速的实现。结果与双边过滤非常相似,但速度更快。 用于边缘感知过滤的域变换 它是Eduardo Gastal 和 Manuel Oliveira 在SIGGRAPH 2011 上题为“边缘感知图像和视频处理的域变换”的论文的部…

MM ME21n/Me22n 采购订单创建保存后增强点

有2处可以增强 我们可以在 013 这里 做这个增强 debug可以看到参数 传递到外部系统中 另外一处是

【VMware】VMware17安装实践记录

目录 1、下载地址 2、安装 2.1 更改一下安装路径 3、激活 前言&#xff1a;本博文记录博主自己安装的过程&#xff0c;便于后续自己学习使用 1、下载地址 联系博主 2、安装 2.1 更改一下安装路径 移除更新和加入计划 3、激活 可使用30天版本

ABeam中国2023社招 | ABeam旗下艾宾信息技术开发(上海)热招职位

招聘岗位 SAP SD Consultant (English Speaker) 职位要求 ■ 3年以上SD项目实施或支持经验 ■ 有效的沟通技巧&#xff0c;快速的反应和积极的态度 ■ 能够在压力下工作或面对挑战 ■ 具备ABAP调试和编程能力 ■ 有MM交叉模块知识优先 ■ 良好的英语能力 SAP EWM/MM Co…

易基因:NAR:ChIP-seq等揭示蛋白质酰基化与c-di-GMP协同调控放线菌发育与抗生素合成机制|项目文章

易基因细菌ChIP-seq测序分析结果见刊《Nucleic Acids Research》 大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2023年06月07日&#xff0c;华东理工大学生物工程学院和生物反应器工程国家重点实验室叶邦策教授和尤迪副教授为共同通…

Redis命令-List、Set和SortedSet类型

1. List类型 与Java中LinkedList类似&#xff0c;可以看做是一个双向链表结构&#xff0c;既支持正向检索也可以支持反向检索。 关于BLPOP和BRPOP&#xff0c;需要设置阻塞时间 此时在另一个客户端中&#xff0c;在user2中添加一个元素 则在第一个客户端中&#xff0c;阻塞解除…

【图神经网络】用PyG实现图机器学习的可解释性

Graph Machine Learning Explainability with PyG 框架总览示例&#xff1a;解释器The Explanation ClassThe Explainer Class and Explanation SettingsExplanation评估基准数据集Explainability Visualisation实现自己的ExplainerAlgorithm对于异质图的扩展解释链路预测 总结…

如何在Windows 10中创建提升的命令提示符快捷方式

命令提示符是在“命令提示符”窗口中键入计算机命令的入口点。通过在提升的命令提示符中键入命令,你可以在不使用 Windows 图形界面的情况下在计算机上执行需要管理员权限的任务。 一、右键单击或按住桌面上的空白区域,然后单击“新建”和“快捷方式”。 二、将下面的任一…

如何使用Postman生成curl?

生成在Lunix系统调接口的curl 直接看图操作 点击</>即可&#xff01;

Kali Linux 简介

概要 Kali Linux 是安全专家和以及网络安全爱好者所使用的工具&#xff0c;你不应该也不允许使用它来对他人的计算机系统进行未经允许的任何活动。任何使用它带来的法律后果和损失&#xff0c;将由使用者自行承担。我们之所以推荐 Kali Linux&#xff0c;是希望有更多的人来保护…

Spring架构篇--2.7.6 远程通信基础--Netty流程总结

前言&#xff1a;虽然netty 内部的流程比较复杂&#xff0c;但是对于用户来说还是非常友好的&#xff0c;我们只需要进行必要的参数设置&#xff0c;以及添加处理业务的handler 即可&#xff1b;本文对netty 进行阶段性的回顾。 1 首先看下netty 整体的一个工作流程图&#xf…