数据结构:插入排序,希尔排序(缩小增量排序)

1.直接插入排序

当插入第 i 个元素时,前面的数据已经排好序了,将后续的数据按大小插入到前面已经排好序的数组中,就是插入排序

特点

1.元素集合越接近有序,时间效率越高

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

3.空间复杂度O(1)

//插入排序
void InsertSort(int* a, int length)
{for (int i = 0; i < length - 1; i++){int end = i;//已经排好的数组的尾部int temp = a[end + 1];while (end >= 0){if (temp < a[end])//小就向前移{a[end + 1] = a[end];--end;}else{break;}}a[end + 1] = temp;}
}

2.希尔排序

时间复杂度约为O(N ^ 1.3)

先进行预排序 -- 目标 : 接近有序

然后再进行插入排序 -- 目标 : 有序

预排序

设定间距(两个数的下标之差)为gap,将彼此间距为gap的数进行插入排序

gap越大,数据跳的越快,大的数据更快到前面的位置,但是越不有序

gap越小,越接近有序

gap = 1时,就是插入排序

eg.

进行希尔排序时可以进行多次预排序,每次gap / 2,并且要求gap > 1保证最后一次预排序gap = 1,即完成排序

void ShellSort(int* a, int n)
{int gap = n;while (gap > 1){gap /= 2;//进行多次预排序,gap > 1保证最后一次预排序gap = 1,即完成排序for (int j = 0; j < gap; ++j){for (int i = j; i < n - gap; i += gap){int end = i;//已经排好的数组的尾部int temp = a[end + gap];while (end >= 0){if (temp < a[end])//小就向前移{a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = temp;}}}
}

gap也可以取3,但是为了保证最后一次预排序时gap为1,还需要gap + 1

void ShellSort(int* a, int n)
{int gap = n;while (gap > 1){gap /= 3 + 1;//进行多次预排序,gap > 1保证最后一次预排序gap = 1,即完成排序for (int j = 0; j < gap; ++j){for (int i = j; i < n - gap; i += gap){int end = i;//已经排好的数组的尾部int temp = a[end + gap];while (end >= 0){if (temp < a[end])//小就向前移{a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = temp;}}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu18安装opensips3.4,开启ws/wss/http接口模块

、如果是centos 7安装则使用yum 命令。 添加库地址注意系统类型&#xff0c;选择对应的系统类型和版本 curl https://apt.opensips.org/opensips-org.gpg -o /usr/share/keyrings/opensips-org.gpg echo "deb [signed-by/usr/share/keyrings/opensips-org.gpg] https:/…

机器学习——AdaBoost算法

机器学习——AdaBoost算法 在机器学习领域&#xff0c;AdaBoost算法是一种非常流行的集成学习方法&#xff0c;旨在提高分类器的性能。本篇博客将介绍AdaBoost算法的原理、算法流程、算法参数&#xff0c;对比AdaBoost和随机森林的区别&#xff0c;并使用Python实现AdaBoost算…

微服务(基础篇-003-Nacos)

目录 Nacos注册中心&#xff08;1&#xff09; 认识和安装Nacos&#xff08;1.1&#xff09; Nacos快速入门&#xff08;1.2&#xff09; 服务注册到Nacos(1.2.1) Nacos服务分级存储模型&#xff08;1.3&#xff09; 配置集群&#xff08;1.3.1&#xff09; 根据集群修改…

【新版】系统架构设计师 - 新版架构备考索引<附2023年11月原题回忆>

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 新版架构备考索引机考详情备考索引与方向&#xff08;个人观点&#xff0c;仅供参考&#xff09;总结附&#xff1a;2023年11月改版机试原题简单回忆 架构 - 新版架构备考索引 首先&#xff0c;此…

AI:152- 利用深度学习进行手势识别与控制

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~ 一. 利用深度学习进行手势识别与控制 …

javaSSM公司招聘管理系统IDEA开发mysql数据库web结构计算机java编程maven项目

一、源码特点 IDEA开发SSM公司招聘管理系统是一套完善的完整企业内部系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;MAVEN方式加 载&#xff0c;系统具有完整的源代码和…

【Linux】Linux工具学习之git

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言一、账号注册1.1 GitHub与Gitee 二、构建仓库三、安装git 四、配置git五、克…

C++初阶:STL容器list的使用与初版自实现

目录 1. list的接口与使用1.1 默认成员函数1.2 迭代器与容量相关成员函数1.3 存储数据操作相关成员函数1.4 其他list操作成员函数 2. list的自实现2.1 list的自实现功能2.2 list的结点结构2.3 list的迭代器2.3 list的结构2.4 list迭代器的运算符重载2.5 list的成员函数 3. cons…

Python 潮流周刊#43:在开源与家庭之间,他选择了家庭

△△请给“Python猫”加星标 &#xff0c;以免错过文章推送 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。本周刊开源&#xff0c;欢迎投稿[1]。另有电报频道[2]作为副刊&#xff0c;补充发布更加丰富的资讯&#xff0c;…

client-go中ListAndWatch机制,informer源码详解

文章首发地址&#xff1a; 学一下 (suxueit.com)https://suxueit.com/article_detail/s9UMb44BWZdDRfKqFv22 先上一张&#xff0c;不知道是那个大佬画的图 简单描述一下流程 client-go封装部分 以pod为例 、先List所有的Pod资源&#xff0c;然后通过已经获取的pod资源的最大版…

python每日可视化分析:从过去到现代数据分析的演进

分析目标 本文旨在探索数据分析发展历程中的关键时刻&#xff0c;包括重要人物的贡献和大事件的发生。通过对比不同年代的数据分析技术和方法&#xff0c;我们可以更好地理解数据分析如何成为今天决策制定不可或缺的一部分。 分析步骤 收集数据&#xff1a;搜集关于数据分析历…

JavaEE企业级分布式高级架构师课程

教程介绍 本课程主要面向1-5年及以上工作经验的Java工程师&#xff0c;大纲由IT界知名大牛 — 廖雪峰老师亲自打造&#xff0c;由来自一线大型互联网公司架构师、技术总监授课&#xff0c;内容涵盖深入spring5设计模式/高级web MVC开发/高级数据库设计与开发/高级响应式web开发…