数据结构系列-插入排序和希尔排序

news2025/4/20 9:31:09

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”   

排序的概念

常见的排序算法:

插入排序

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

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

 

#define _CRT_SECURE_NO_WARNINGS
//Sort.c
#include"Sort.h"
void PrintArray(int* a, int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d ", a[i]);
	}
	print("\n");
}

void InsertSort(int* a, int n)
{
	for (int i = 0; i < n - 1; i++)
	{
		int end = i;
		int tmp = a[end + 1];
		while (end >= 0)
		{
			if (tmp < a[end])
			{
				a[end + 1] = a[end];
				--end;
			}
			else
			{
				break;
			}
		}
		a[end + 1] = tmp;
	}
}
//Test.c
#define _CRT_SECURE_NO_WARNINGS
#include"Sort.h"
void TestInsertSort()
{
	int a[] = { 5,3,9,6,2,4,7,1,8 };
	PrintArray(a, sizeof(a) / sizeof(int));
	InsertSort(a, sizeof(a) / sizeof(int));
	PrintArray(a, sizeof(a) / sizeof(int));
}
int main()
{
	TestInsertSort();

	return 0;
}

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

1.元素集合越接近有序,直接插入排序算法的时间效率越高

2.时间复杂度O(N^2)

3.空间复杂度O(1),它是一种稳定的排序算法。

4.稳定性,稳定 

希尔排序

希尔排序法又称缩小增量法,希尔排序法的基本思想是,先选定一个整数,把待排序文件中所有记录分成个组,所有距离为..的记录分在一个组内,并对每一组进行排序。然后,取,重复上述分组和排序的工作,当到达=1时,所有记录在统一组内排好序。

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

	
}
void TestShelISort()
{
	int a[] = { 5,3,9,6,2,4,7,1,8 };
	PrintArray(a, sizeof(a) / sizeof(int));
	ShellSort(a, sizeof(a) / sizeof(int));
	PrintArray(a, sizeof(a) / sizeof(int));
}
int main()
{
	//TestInsertSort();
	TestShelISort();
	return 0;
}

 

 

 

 

 

 

 

 

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

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

相关文章

如何合规与安全地利用专业爬虫工具,构建企业数据竞争优势

摘要&#xff1a; 本文深入探讨了在当今大数据时代&#xff0c;企业如何通过合规且安全的方式运用专业爬虫工具&#xff0c;有效收集并分析海量信息&#xff0c;进而转化为企业独有的数据优势。我们不仅会介绍最佳实践&#xff0c;还会讨论关键技术和策略&#xff0c;帮助企业…

virtuoso tran仿真中如何画出temperature的瞬态曲线

virtuoso tran仿真中如何画出温度的瞬态曲线&#xff1f; 在tran仿真中如果加入了瞬态热效应&#xff0c;设置Dynamic parameter&#xff0c;即时间随温度变化&#xff0c;如何plot temp vs. time曲线&#xff1f; 1.电路中加一根线和变量名相同 2.ADE L/XL Test Editor->Ou…

如何在安卓设备上运行Linux(使用termux+图形界面)加上换源等优化

我学生嘛&#xff0c;喜欢讲故事&#xff0c;你看看我大部分文章开头&#xff0c;都会有"事情的起因"一类话 当然这次也不例外哦 我最新获得了一个新平板&#xff0c;华为的matepad air&#xff0c;很喜欢。想捣鼓&#xff0c;不太懂&#xff0c;但好像鸿蒙不能直接…

MyBatis中的赋值语句:#{}和${}的区别差异(常见面试题)

我们开始先总结他们的差异&#xff0c;后面再使用代码展示差异 1.0.#{}和${}的差异 &#xff08;1&#xff09;${}可能存在sql注入的安全问题 &#xff08;2&#xff09;${}是即时sql&#xff08;参数直接拼接&#xff09;&#xff0c;不能进行缓存&#xff1b;#{}是预编译sq…

基于单文档的MFC图像增强

目录 function.h ColorEnhanceDib.h ColorEnhanceDib.cpp Dib.h Dib.cpp FrequencyFilterDib.h FrequencyFilterDib.cpp GrayTransformDib.h GrayTransformDib.cpp HistogramDib.h HistogramDib.cpp SharpenProcessDib.h SharpenProcessDib.cpp SmoothProcessDib.h Sm…

【Spring Boot】自动配置源码解析

目录 Spring-Boot-Starter一、准备配置类和 Bean 对象二、自动配置条件依赖三、Bean 的参数获取3.1 EnableConfigurationProperties 注解3.2 ConfigurationProperties 注解 四. Bean 的发现4.1 自己项目的 Bean 扫描4.2 jar 包的 Bean 扫描 五. Bean 的加载 自动配置总结 Sprin…

Linux系统编程——生产者消费者模型

目录 一&#xff0c;模型介绍 1.1 预备知识&#xff08;超市买东西的例子&#xff09; 1.2 模型介绍 1.3 CP模型特点 二&#xff0c;基于阻塞队列的CP模型 2.1 介绍 2.2 阻塞队列的实现 2.3 主函数实现 2.4 效果展示 三&#xff0c;POSIX信号量 3.1 信号量原理 3…

Date已不再推荐?为什么我们需要新的 Java 日期时间 API?(LocalDate、LocalDateTime、LocalTime 、Instant)

日期时间 API 是 Java 8 版本的最大功能之一。Java 从一开始就缺少一致的日期和时间方法&#xff0c;而 Java 8 日期时间 API 是对核心 Java API 的一个受欢迎的补充。 为什么我们需要新的 Java 日期时间 API&#xff1f; 在开始研究 Java 8 日期时间 API 之前&#xff0c;让我…

蛋仔派对S18赛季攻略

本人蛋仔名&#xff1a;Z周明昊帅哥&#xff08;稍微自恋了一点&#xff09;&#x1f60e; 没夺冠的心情&#xff0c;请看下图&#xff1a; 呜呜呜…… 蛋仔五小只人形&#xff1a; 观看视频 完结撒花^_^ BUY&#xff01;&#xff01;&#xff01;

31-库文件的制作与使用——静态库文件与动态库文件

31-库文件的制作与使用——静态库文件与动态库文件 一、库文件介绍 库文件是在计算机编程中用来存放变量、函数和类的文件&#xff0c;提供给开发者开箱即用的资源。库文件分为静态库和动态库两种&#xff0c;二者在程序链接阶段的行为不同&#xff1a; 静态库&#xff1a;在…

HALCON如何添加外部函数

1、在HALCON菜单栏中点击【编辑】选择【参数选择】或者 点击【函数】选择【管理函数】进入到参数窗口&#xff1b; 2、在参数窗口下依次选择【函数】、【目录】和【添加】操作&#xff1b; 3、外部函数添加成功后&#xff0c;其他程序文件均可使用该外部函数。

自定义prometheus监控获取nginx_upstream指标

1、前言 上篇文章介绍了nginx通过nginx_upstream_check_module模块实现后端健康检查&#xff0c;这篇介绍一下如何自定义prometheus监控获取nginx的upstream指标来实时监控nginx。 2、nginx_upstream_status状态 支持以下三种方式查看nginx_upstream的状态 /status?formatht…

【C++】标准库:介绍string类

string 一.string类介绍二.string类的静态成员变量三.string类的常用接口1.构造函数&#xff08;constructor&#xff09;2.析构函数&#xff08;destructor&#xff09;3.运算符重载&#xff08;operator&#xff09;1.operator2.operator[]3.operator4.operator 4.string的四…

Kitti数据集解析

目录 一、概述 2、详细内容 1、lable标签 2、标定参数 3、点云数据 C++代码读取bin文件 python代码读取bin文件 三、功能实现 1、点云数据转成投影到图像 2、图像数据转成投影到点云 3、点云3D结果转成图像BEV鸟瞰图结果 一、概述 KITTI整个数据集是在德国卡尔斯鲁厄…

DDoS攻击:威胁与防护策略

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是网络安全领域的一大挑战&#xff0c;对企业造成严重的影响。本文将深入探讨DDoS攻击的原理和防护方法。 DDoS攻击的原理 DDoS攻击通过大量请求&#xff0c;使目标系统无法响应正常请求。攻击者利用多台计算机发送大量请求&am…

【Unity2D 2022:Data】读取csv格式文件的数据

一、创建csv文件 1. 打开Excel&#xff0c;创建xlsx格式文件 2. 编辑卡牌数据&#xff1a;这里共写了两类卡牌&#xff0c;第一类是灵物卡&#xff0c;具有编号、卡名、生命、攻击四个属性&#xff1b;第二类是法术卡&#xff0c;具有编号、卡名、效果三个属性。每类卡的第一…

使用在UE5中使用AirSim插件Eigen库头文件引用报错,出现报错的解决方式

一、概述 如图所示&#xff0c;用红线圈出的两条头文件引用会报错&#xff0c;提示无法找到他们&#xff0c;但是可以发现的是&#xff0c;他们的路径书写是没有问题的。 // #include <Source/Airlib/deps/eigen3/Eigen/Core> // #include <Source/Airlib/deps/eigen…

追问试面试系列:开篇

我们不管做任何事情&#xff0c;都是需要个理由&#xff0c;而不是盲目去做。 为什么写这个专栏&#xff1f; 就像我们被面试八股文时&#xff0c;市面上有很多面试八股文&#xff0c;随便一个八股文都是500&#xff0c;甚至1000面试题。诸多面试题&#xff0c;难道我们需要一…

【系统架构设计师】十八、信息系统架构设计理论与实践①

目录 一、信息系统架构概述 二、信息系统架构风格与分类 2.1 信息系统架构风格 2.2 信息系统架构分类 三、信息系统架构模型 3.1 单体应用 3.2 客户机/服务器 3.2.1 二层 C/S 3.2.2 三层 C/S 和 B/S 3.2.3 多层 C/S 和 B/S 3.2.4 MVC 3.3 面向服务架构(SOA)模式 …

PVE环境中调整虚拟机磁盘大小

我的希望将PVE中的虚拟机磁盘调整一下&#xff0c;增加20GB。在查询了一些资料后&#xff0c;做一下总结教程。 环境是 PVE8.2.2 版本&#xff0c;虚拟机系统是centos7.9.2009-minimal&#xff0c; 安装系统时划分磁盘分区方式是默认分区方式&#xff08;不同分区方式下&#…