数据结构算法-希尔排序

news2024/11/25 10:14:35

引言

在一个普通的下午,小明和小森决定一起玩“谁是老板”的扑克牌游戏。这次他们玩的可不仅仅是娱乐,更是要用扑克牌来决定谁是真正的“大老板”。

然而,小明的牌就像刚从乱麻中取出来的那样,毫无头绪。小森的牌也像是被小丑掷出的,毫无规律可言。看着手中的牌,他们陷入了深深的思考。

就在他们即将放弃的时候,小明灵光一现:“我们可以使用希尔排序来对扑克牌进行排序!”

小森一脸困惑地问:“希尔排序?那是什么鬼?”

小明解释道:“希尔排序是一种基于插入排序的算法,可以把乱序的数组变得有序。我们可以通过逐渐减少增量序列的方式,让扑克牌的局部变得有序。”

听到这个解释,小森瞬间兴奋起来:“那就让我们开始吧!”

他们开始按照希尔排序的原理 :对扑克牌进行排序。首先,他们把牌按照一定的增量分成几个小堆,然后对每个小堆进行插入排序。随着增量的逐渐减少,他们不断地对小堆进行插入排序,直到增量变为1。在这个过程中,他们不断地比较牌的大小,进行交换。最后,整个序列都变得有序了。

经过一番努力,小明和小森终于将扑克牌排好序了。在接下来的“谁是老板”游戏中,他们凭借着已经排好序的扑克牌,一路高歌猛进,最终获得了胜利!

小森高兴地说:“希尔排序真是太神奇了!我们以后可以多使用它来对扑克牌进行排序!”

小明也笑着说:“是啊,而且我们可以把扑克牌当作数字来练习我们的数学能力!”

在这个欢声笑语的下午,小明和小森不仅学会了使用希尔排序来对扑克牌进行排序,还体验到了算法的魅力。他们明白了一个道理:只要肯努力,总会找到解决问题的方法!

希尔排序算法核心思路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述希尔排序 先将待排序序列按照一定的间隔分成若干个子序列,对这些子序列进行插入排序。然后缩小间隔,再次进行插入排序。不断重复这个过程,直到最后的间隔为1,此时整个序列已经基本有序了,再进行一次插入排序即可完成排序。

希尔排序算法专区

// ShellSort是一个函数,接受一个整数数组arr,数组的大小size,以及一个比较函数comp作为参数  
void  ShellSort(int arr[], int size, bool (*comp)(const int&, const int&)) {  
  
    // 初始化gap为数组长度的一半,这是希尔排序的经典起始距离  
    for (int  gap = size/2; gap>0; gap/=2){  
  
        // 遍历从gap位置开始到数组末尾的每一个元素  
        for (int  i = gap; i < size; i++){  
  
            // 保存当前元素的值  
            int value = arr[i];  
  
            // 从当前元素位置开始向前遍历,每次移动gap的位置  
            int j = i - gap;  
            // 只要前一个元素大于当前元素(满足comp函数的条件),就继续向前移动  
            for (;j>=0 &&comp(arr[j],value); j-=gap){  
  
                // 向前移动gap的位置,将前一个元素向后移动  
                arr[j + gap] = arr[j];  
  
            }  
  
            // 在正确的位置插入当前元素  
            arr[j + gap] = value;  
        }  
  
    }  
}


// 定义一个名为GreaterCmp的函数,它接受两个const int&类型的参数val1和val2,返回值为bool类型。当val1大于val2时返回true,否则返回false。  
bool GreaterCmp(const int& val1, const int& val2) {
	return val1 > val2;
}

// 定义一个名为LessCmp的函数,它接受两个const int&类型的参数val1和val2,返回值为bool类型。当val1小于val2时返回true,否则返回false。  
bool LessCmp(const int& val1, const int& val2) {
	return val1 < val2;
}



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

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

相关文章

超使用的十个JavaScript技巧

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 JavaScript 作为最流行的语言之一&#xff0c;其语法灵活且每年都在不断吸纳新特性&#xff0c;即使是一个从业多年的老手&#xff0c; 偶尔也会有一些被…

CentOS7 部署PostgreSQL

参考文档&#xff1a;https://www.postgresql.org/download/linux/redhat/ 1. 配置yum源 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm2. 安装PostgreSQL13 yum install -y postgresql13-server3…

网络安全领域的12个大语言模型用例

网络安全是人工智能最大的细分市场&#xff0c;过去几年网络安全厂商纷纷宣称整合了人工智能技术&#xff08;当然也有很多仅仅是炒作&#xff09;&#xff0c;其中大部分是基于基线和统计异常的机器学习。 网络安全是人工智能最大的细分市场&#xff0c;过去几年网络安全厂商…

synchronized关键字-监视器锁(monitor lock)

这就是我们上一篇中代码提到的加锁的主要方式,本质上是调用系统api进行加锁,系统api本质是靠cpu特定指令加锁. synchronize的特性 互斥性 synchronized会起到互斥效果,某个线程执行到某个对象的synchronized中时,,其它线程如果也执行到同一个对象synchronized就会阻塞等待(锁…

快速安装Axure RP Extension for Chrome插件

打开原型文件的html&#xff0c;会跳转到这个页面&#xff0c;怎么破&#xff1f; 我们点开产品设计的原型图如果没有下载Axure插件是打不开&#xff0c;而我们国内网通常又不能再google商店搜索对应插件&#xff0c;下面教大家如何快速安装 1、打开原型文件->resources-&g…

云服务器哪家便宜?亚马逊云科技价格与性能全面解析

前言 近年来&#xff0c;随着企业数字化转型的推进&#xff0c;云服务器选择成为业界热议的话题。在众多云服务提供商中&#xff0c;亚马逊云科技备受关注&#xff0c;其云服务器在价格与性能方面的表现备受期待。为了帮助您更全面了解&#xff0c;本文将以第三方观点&#xf…

S120和PLC通讯设置

一、DP 总线通讯功能简述 PROFIBUS-DP 来实现 S7-300 与 SINAMICS S120 之间的数据交换&#xff0c;用 S7-300 来控制 S120 的运转&#xff0c;及读写所需的参数。 S7-300 与 SINAMICS S120 之间的 DP 通讯是借助于系统功能块 SFC14/SFC15 进行周期性数据通讯。 周期性数…

C# OpenCvSharp DNN 深度神经网络下的风格迁移模型

目录 介绍 效果 项目 代码 下载 C# OpenCvSharp DNN 深度神经网络下的风格迁移模型 介绍 深度神经网络下的风格迁移模型&#xff0c;适用于OpenCv、EmguCv。 斯坦福大学李飞飞团队的风格迁移模型是一种基于深度学习的图像处理技术&#xff0c;可以将一张图像的风格转移…

使用有道词典复制网页上的字

1. 今天发现一个新大陆&#xff0c;同事教的&#xff0c;有道词典可以复制网页上的字&#xff0c;也可以复制PDF文件等一些限制不可复制的字&#xff0c;原来不可复制的字&#xff0c;现在用有道都可以复制了&#xff0c;不需要用油猴下载脚本了。写给老婆这种纯电脑小白的。其…

paddleocr文字识别变迁

数据挖掘 v3 UIM&#xff1a;无标注数据挖掘方案 UIM&#xff08;Unlabeled Images Mining&#xff09;是一种非常简单的无标注数据挖掘方案。核心思想是利用高精度的文本识别大模型对无标注数据进行预测&#xff0c;获取伪标签&#xff0c;并且选择预测置信度高的样本作为训…

分布式I/O模块,为您的数据收集与控制提供强大支持

分布式I/O模块可用于数据收集和各种控制的应用。分布式I/O模块具有可靠度高、价格优惠、设置容易、网络布线方便等特性&#xff0c;适用于分散地区的应用&#xff0c;可以为您节省系统整合的时间和费用。以往都是采用控制电缆和PLC连接。如果采用了分布式I/O模块&#xff0c;就…

界面控件DevExpress WPF导航组件,助力升级应用程序用户体验!(上)

DevExpress WPF的Side Navigation&#xff08;侧边导航&#xff09;、TreeView、导航面板组件能帮助开发者在WPF项目中添加Windows样式的资源管理器栏或Outlook NavBar&#xff08;导航栏&#xff09;&#xff0c;DevExpress WPF NavBar和Accordion控件包含了许多开发人员友好的…

Win10无法删除文件需要管理员权限的解决方法

在Win10电脑中&#xff0c;用户想要删除不需要的文件&#xff0c;却收到了需要管理员权限才能删除&#xff0c;导致用户自己无法将文件删除掉。下面小编给大家带来Win10系统删除文件需要权限的解决方法&#xff0c;解决后用户在Win10电脑上就能删除任意文件了。 Win10无法删除文…

【数据结构】面试OJ题———栈|队列|互相实现|循环队列|括号匹配

目录 1. 有效的括号 思路&#xff1a; 2.用队列实现栈 思路&#xff1a; 3.用栈实现队列 思路&#xff1a; 4.设计循环队列 思路&#xff1a; 1. 有效的括号 20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 给定一个只包括 (&#xff0c;)&#xff0c;{&…

Retrofit嵌套请求与适配器

一、前言&#xff1a; 1. retrofit嵌套请求 在实际开发中&#xff0c;可能会存在&#xff1a;需要先请求A接口&#xff0c;在请求B接口的情况&#xff0c;比如进入“玩android”网页请求获取收藏文章列表&#xff0c;但是需要先登录拿到Cookie才能请求搜藏文章几口&am…

语义分割 LR-ASPP网络学习笔记 (附代码)

论文地址&#xff1a;https://arxiv.org/abs/1905.02244 代码地址&#xff1a;https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_segmentation/lraspp 1.是什么&#xff1f; LR-ASPP是一个轻量级语义分割网络&#xff0c;它是在Mobil…

【最新版本教程】GPT4暂停升级也可硬升!

本教程亲测整个过程&#xff0c;没有问题。 步骤&#xff1a; 1、有自己的3.5账号&#xff08;没有的可以自己去注册&#xff0c;据说现在不用手机号了&#xff0c;方法自己查去&#xff09;&#xff1b; 2、解决国外银行卡的问题。国外银行卡开通&#xff08;https://bewild…

Kafka集群调优

一、前言 我们需要对4个规格的kafka能力进行探底&#xff0c;即其可以承载的最大吞吐&#xff1b;4个规格对应的单节点的配置如下&#xff1a; 标准版&#xff1a; 2C4G铂金版&#xff1a; 4C8G专业版&#xff1a; 8C16G企业版&#xff1a; 16C32G 另外&#xff0c;一般来讲…

Excel——多列合并成一列的4种方法

Excel怎么将多列内容合并成一列&#xff1f; 怎么将多个单元格的内容连接起来放在一个单元格里&#xff1f; 比如下图&#xff0c;要将B、C、D列的内容&#xff0c;合并成E列那样&#xff0c;该怎么做呢&#xff1f; △图1 本文中&#xff0c;高潜老师将给大家介绍 4种 将多…

制作一个RISC-V的操作系统五-RISC-V汇编语言编程二

文章目录 RISC-V汇编指令操作对象RISC-V汇编指令编码格式小端序的概念RISC-V汇编指令分类RISC-V汇编伪指令 RISC-V汇编指令操作对象 RV32I&#xff1a;RISC-V32位机器整数指令集 指令集分非特权指令集和特权指令集 XLEN&#xff1a;变量代表当前机器的字长&#xff08;32位 64…