【C/C++ 02】希尔排序

希尔排序虽然是直接插入排序的升级版本,和插入排序有着相同的特性,即原始数组有序度越高则算法的时间复杂度越低(预排序机制),但是是不稳定排序算法。

为了降低算法的时间复杂度,所以我们需要在排序之前尽可能提高数组的有序度。

希尔排序定义一个间隔变量gap,对待排序数组进行分组,将下标间隔为gap的多个数组分为一组,每次遍历都只对组内数据进行排序,然后降低gap,重复上述分组排序,最后gap==1,便是进行直接插入排序,但此时待排序数组的有序度已经很高了,故最后一次排序的时间复杂度接近于O(n)

gap的取值可以自定义,通常会使用gap = n / 3 + 1进行取值。

希尔排序的时间复杂度难以精确统计,与gap的取值算法和原始数组的有序性强相关,而我们gap = n / 3 + 1算法经大量实验研究得希尔排序的时间复杂度为O(n^{1.25})~O(1.6n^{1.25})

void ShellSort(int* arr, int n)
{int gap = n;while (gap > 1){gap = gap / 3 + 1;int i = gap;for (; i < n; ++i)		{int j = i;int end = arr[j];while (j >= gap && arr[j - gap] > end){arr[j] = arr[j - gap];j -= gap;}arr[j] = end;}}
}

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

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

相关文章

ARCGIS PRO SDK 数据库属性域设置与获取

一、数据库创建属性域。 sdk3.1 以下的开发版本不支持&#xff0c;不能使用 Pro SDK 向域添加新的编码值&#xff0c;可以使用地理处理工具&#xff1a; 创建属性域 Dim va As IReadOnlyList(Of String) Dim gpResult As ArcGIS.Desktop.Core.Geoprocessing.IGPResult Dim env…

【EEG信号处理】ERP相关

ERP&#xff0c;全称为event-related potential&#xff0c;中文是事件相关电位。 首先要明确的一点是&#xff0c;ERP是根据脑电图EEG得到的&#xff0c;他是EEG的一部分&#xff0c;是最常用的时域分析方法 可能有一部分是介绍不到的&#xff0c;望谅解 在维基百科中给的定义…

力扣题集(第一弹)

一日练,一日功;一日不练十日空。 学编程离不开刷题&#xff0c;接下来让我们来看几个力扣上的题目。 1. 242. 有效的字母异位词 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数…

docker 修改镜像存储路径

Docker的默认存储路径通常是磁盘上的一个临时目录。在默认情况下&#xff0c;Docker容器的数据存储在/var/lib/docker目录下&#xff0c;但是这个路径可能会在系统磁盘空间不足时变得不可用。因此&#xff0c;为了确保数据的可靠性和可用性&#xff0c;有必要更改Docker的默认存…

仅使用 Python 创建的 Web 应用程序(前端版本)第12章_总结

在栏目中&#xff0c;我们使用 Streamlit 等 Python 模块创建了一个 Web 应用程序&#xff0c;而无需编写任何 HTML/JS/CSS。 我希望这能帮助那些已经开始使用 Flask/Django/FastAPI 但对 HTML/JS/CSS 感到沮丧的人&#xff0c;或者那些想要快速创建演示应用程序的人。 WTS 源代…

flutter制作APP的学习

1. 先从flutter对应的前端知识入手 a. 屏幕适配规律&#xff0c;解决大小样式问题 https://juejin.cn/post/7039868577658175524 &#xff08;选择screenutil的使用指南&#xff1a;【Flutter】屏幕像素适配方案 ( flutter_screenutil 插件 )-CSDN博客 Futter 屏幕适配框架…

Manjaro Linux 安装 VirtualBox及VirtualBox命令行

Manjaro 安装GUI VirtualBox 客户端 在 Manjaro Linux 上&#xff0c;你可以使用 pamac 包管理器来安装 VirtualBox。以下是在终端中执行安装 VirtualBox 的命令&#xff1a; 打开终端。 运行以下命令来安装 VirtualBox&#xff1a; pamac install virtualbox如果提示输入管理…

jenkins job无法停止

jenkins 构建job没有启动&#xff0c;构建号点进去杀不掉&#xff0c;左侧没有abort按钮。 进到 “管理Jenkins” -> “脚本控制台” 运行以下脚本&#xff08;需要指定JobName和JobNumber&#xff0c;job名如如果套文件夹&#xff0c;比如cds文件夹下面名字为auto的job&am…

【数据结构与算法】之哈希表系列-20240129

这里写目录标题 一、217. 存在重复元素二、219. 存在重复元素 II三、242. 有效的字母异位词四、268. 丢失的数字五、290. 单词规律六、349. 两个数组的交集七、350. 两个数组的交集 II 一、217. 存在重复元素 简单 给你一个整数数组 nums 。如果任一值在数组中出现至少两次 &a…

VS+QT 配置Eigen库

1、下载Eigen库&#xff0c;如下&#xff1a; 2、解压到项目目录下&#xff0c;如下&#xff1a; 3、 在C/C中包含文件&#xff0c;如下&#xff1a; 4、在头文件中加入如下代码&#xff1a; 5、测试代码&#xff1a; //.cpp文件 #include "testEigen.h"testEigen::…

Linux下安装edge

edge具有及其强大的功能&#xff0c;受到很多人的喜爱&#xff0c;它也开发Linux版本&#xff0c;下面是安装方法&#xff1a; 1.去edge官网下载Linux(.deb)文件。 https://www.microsoft.com/zh-cn/edge/download?formMA13FJ 2.下载之后输入以下指令&#xff08;后面是安装…

Java的集合和字符串相互转换

一、将集合转换为字符串 如果你有一个集合&#xff0c;并且你想将它转换为字符串&#xff0c;你可以使用Java 8引入的String.join()方法。这是一个简单的示例&#xff1a;】 import java.util.Arrays; import java.util.List; public class CollectionToStringExample { p…

Blender 与 3ds Max | 面对面的直接较量(2024)

Blender和3ds Max&#xff0c;哪个动画软件更好&#xff1f;作为一个从事动画领域十年的专业人士&#xff0c;Mark McPherson提供了八条最新建议&#xff0c;帮助你了解哪个软件更适合满足你的3D动画需求。 1.建模 获胜者&#xff1a;3ds Max。3ds Max的建模机制已经被证明是…

软件架构设计

一、考点分布 软件架构的概念&#xff08;※※※&#xff09;基于架构的软件开发&#xff08;※※※※&#xff09;软件架构风格&#xff08;※※※※※&#xff09;特定领域软件架构&#xff08;※※※&#xff09;软件质量属性&#xff08;※※※※※&#xff09;软件架构评估…

Shell中正则表达式和sed编译器

目录 一、正则表达式 1.元字符 2.表示次数 3.位置锚定 4.分组 5.扩展正则表达式 二、sed编译器 1.什么是sed编译器 2.sed编译器的工作流程 3.sed命令格式 一、正则表达式 1.元字符 ①.&#xff1a;在正则表达式中.表示任意单个字符。 [rootpc1 data]#grep -o r.…

第一节 分布式架构设计理论与Zookeeper环境搭建

1. 分布式架构设计理论 学习Zookeeper之前,我们需要掌握一些分布式系统基础知识&#xff1a;了解分布式系统的概念、原理。 配置管理 域名服务 分布式同步 发布订阅 1. 分布式架构介绍 1.1 什么是分布式 《分布式系统原理和范型》一书中是这样定义分布式系统的&#xff1a…

【ArcGIS微课1000例】0099:土地利用变化分析

本实验讲述在ArcGIS软件中基于两期土地利用数据,做土地利用变化分析。 文章目录 一、实验描述二、实验过程三、注意事项一、实验描述 对城市土地利用情况进行分析时,需要考虑不同时期土地利用图层在空间上的差异性,如农用地转建筑用地的空间变化。而该变化过程表现为各时期…

C#学习笔记_字符串常用方法

ToUpper()/ToLower() 作用&#xff1a;将字符串中字符转换为大写/小写字符&#xff0c;仅对字符有效&#xff0c;返回转换后的字符串。 使用&#xff1a;字符串变量名.ToUpper() / 字符串变量名.ToLower() 使用实例如下&#xff1a; using System; using System.Collection…

C#,贝尔数(Bell Number)的计算方法与源程序

1 埃里克坦普尔贝尔 贝尔数是组合数学中的一组整数数列&#xff0c;以埃里克坦普尔贝尔&#xff08;Eric Temple Bell&#xff09;命名&#xff0c; 埃里克坦普尔贝尔&#xff08;生于1883年2月7日&#xff0c;苏格兰阿伯丁郡阿伯丁&#xff0c;于1960年12月21日在美国加利福尼…

2024年数学建模美赛C题(预测 Wordle)——思路、程序总结分享

1: 问题描述与要求 《纽约时报》要求您对本文件中的结果进行分析&#xff0c;以回答几个问题。 问题1&#xff1a;报告结果的数量每天都在变化。开发一个模型来解释这种变化&#xff0c;并使用您的模型为2023年3月1日报告的结果数量创建一个预测区间。这个词的任何属性是否会…