shell排序算法

shell排序算法严格来说基于插入排序的思想,其又称为希尔排序或者缩小增量排序。shell排序算法的排序流程如下:
1)将n个元素的数组分为n/2个数据序列,第一个数据和第n/2+1个数据为一对
2)一次循环使每一个序列对应排好顺序
3)然后,再变为n/4个序列,再次排序
4)不断重复上述过程

例如如下数据排序

初始数据 127 118 105 101 112 100

一次排序 101 112 100 127 118 105

二次排序 100 101 105 112 118 127

第一次排序 首先数组分为6/2=3 3个元素一组
第二次排序 6/4=1(取整数) 每个逐个数据比较,采用插入算法进行


public class ShellSort {
public static int count = 0;

public static void main(String[] args) {

int[] data = new int[] { 5, 3, 6, 2 };
print(data);
shellSort(data);
print(data);

}

public static void shellSort(int[] data) {
// 计算出最大的h值
int h = 1;
System.out.println(data.length / 3);
while (h <= data.length / 3) {
h = h * 3 + 1;
}
while (h > 0) {
for (int i = h; i < data.length; i += h) {
if (data[i] < data[i - h]) {
int tmp = data[i];
int j = i - h;
while (j >= 0 && data[j] > tmp) {
data[j + h] = data[j];
j -= h;
}
data[j + h] = tmp;
print(data);
}
}
// 计算出下一个h值
h = (h - 1) / 3;
}
}

public static void print(int[] data) {
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + "\t");
}
System.out.println();
}
}
自适应粒子群优化(Adaptive Particle Swarm Optimization,APSO 下面是一个关于自适应粒子群优化(Adaptive Particle Swarm Optimization,APSO)的博客,希望可以帮助您。提示:以下是本篇文章正文内容,下面案例可供参考在上面的代码中,表示粒子的数量,表示解空间的维度,表示迭代次数,表示优化的目标函数。在__init__方法中,我们初始化了粒子群的位置和速度,并将每个粒子的位置作为其最优解,将其适应度值初始化为正无穷。我们还初始化了学习因子和惯性权重的参数。在run方法中,我们迭代了次,计算每个粒子的适应度值和最优解。 阅读详情

相关推荐

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7450

Shell编程之排序

Shell编程之排序,包含冒泡排序、选择排序、插入排序、反转排序、睡眠排序以及希尔排序等,含详细讲解原理,以及图文讲解,配合示例,以及代码行

欲买桂花同载酒 3707

别再只会用QTcpSocket了!手把手教你用QSslSocket为你的Qt网络应用加上SSL/TLS加密(附完整代码示例)

本文详细介绍了如何将Qt网络应用从QTcpSocket迁移到QSslSocket,实现SSL/TLS加密传输。通过对比API差异、解析核心机制和提供完整代码示例,帮助开发者快速掌握安全网络编程技巧,有效防范数据窃听和中间人攻击等安全风险。

weixin_30654583的博客 400

shell的排序

shell的排序

m0_71931851的博客 2173

Linux下自动化解析q7签名文件的有效期与时间戳

本文详细介绍了在Linux环境下自动化解析q7签名文件有效期与时间戳的方法。通过编写高效脚本,开发者可以批量提取签名时间信息,验证签名有效性,并集成到CI/CD流程中。文章提供了完整的脚本实现,包括错误处理、批量处理功能,并解决了常见环境问题,特别适用于国产操作系统如UOS的开发场景。

weixin_30872499的博客 520

STM32F401RET6寄存器手册阅读标记

对于时钟树配置,可参考STM32CubeMX中的时钟树配置,STM32CubeMX将基础配置图像化,较为简单。RCC_CR寄存器的HSIRDY位为只读位,当读取值为1时,表示HSI振荡器准备就绪,当HSION位被设置时,HSIRDY会自动设置为低电平。//问题标记:USART配置寄存器信息是如何与USART1/2/3建立联系的(为什么不是三个分别配置)查阅寄存器手册可知,需要配置时钟的模块有:USART1,IO port A。(2)TX配置方法(寄存器手册512页)(4)配置寄存器(寄存器手册548页)

m0_72615170的博客 1468

shell脚本之数组元素排序

1. 直接选择排序,从一轮开始比出本轮最大的元素,将最大的元素放入数组最后一个下标位置,并且不参与下一轮比较,依次类推直到最后一轮2.反转排序,以数组中间下标为对称中中心(数组长度为奇数是中间值下标为对称中心,偶数假象它俩中间存在对称中心),两边对称的元素进行交换3.冒泡排序,相邻的两个元素比较大小,大放在后面,只要相邻就比较,一直比出本轮最大然后进行数组长度减1的轮数比较,每次两两比较交换产生最大,排在最后(对于当前元素最后的位置)

qq_62462797的博客 2659

复现报告:《多回路人机控制系统仿真及II型PIO分析》方法复现与代码实现

本文复现了谭文倩硕士论文《多回路人机控制系统仿真及II型PIO分析》中的关键方法,重点实现了频域驾驶员模型辨识和参数灵敏度分析。通过数字化提取论文图表数据,构建了结构驾驶员模型传递函数,并验证了参数变化对系统特性的影响。采用MATLAB实现了描述函数计算、模型参数辨识和灵敏度分析算法,为后续神经网络模型辨识和II型PIO研究奠定了基础。由于缺乏原始实验数据,部分结果通过数值模拟获得,但仍有效重现了论文的核心分析方法。~~~~~

huanghm88的专栏 175

shell算法

1、冒泡排序 类似于气泡上涌的动作,会将数据在数组中从大到小或从小到大不断向前移动 基本思想: 冒泡排序基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面, 把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部升到顶部 算法思路: 冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1 因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。 而内部循环主要用于对比数组中每个相邻元素

qq_52914969的博客 433

基于Lumerical的1550 nm InGaAs/InP与InGaAs/InAlAs APD设计与功率饱和度优化

摘要 本研究利用Ansys Lumerical软件对1550 nm激光雷达应用的InGaAs/InP和InGaAs/InAlAs雪崩光电二极管(APD)进行仿真设计与优化。通过FDTD光学仿真获取光吸收分布,结合CHARGE模块的电学仿真分析暗电流、光电流及雪崩增益特性。重点研究了两种材料体系的性能差异,并针对近距离强反射导致的功率饱和问题提出结构优化方案。仿真结果表明,InGaAs/InAlAs APD具有更优的过量噪声特性,而优化的电荷层设计可显著提升器件的功率饱和阈值。研究提供了完整的仿真流程与代码实

huanghm88的专栏 97

DeepSeek邮件管理全攻略

DeepSeek邮件助手是一款高效的邮件处理工具,提供智能分类、撰写、回复和任务自动化功能。通过API调用或多智能体系统,它能自动分类邮件意图、生成专业回复并优化邮件内容。核心功能包括智能过滤、会议安排和任务提醒,支持与主流邮箱服务集成。提供精准提示词模板,帮助用户快速生成得体邮件,提升工作效率。适合个人和企业使用,通过简单配置即可实现邮件处理自动化。

Genio_Wang的博客 180

Shell(希尔)排序算法详解之C语言版

Shell排序算法是插入排序算法的一种改进算法,即分组插入排序算法,是不稳定排序算法。 其基本原理就是将初始数组按照某一规则分成多个子数组,在每个子数组内进行插入排序,经过多趟这样的分组排序后,即可得到排好序的数组。 为了方便实现分组,引入增量d,即将距离为d的元素组成一个新的子数组,这样也是将原数组分割成d个子数组,在组内进行直接插入排序。当完成一趟排序之后,修改d的值,重复上述操作,直到d取值是1的时候结束整个排序过程。

sunnyoldboy博客 2677

【红绿灯识别】基于计算机视觉实现道路信号灯检测识别系统附Matlab代码

随着自动驾驶技术的快速发展,对道路交通信号灯的检测识别技术也提出了更高的要求。本文提出了一种基于计算机视觉的道路信号灯检测识别系统,该系统能够准确地检测和识别道路交通信号灯,并输出信号灯的颜色信息。该系统采用深度学习方法,利用卷积神经网络(CNN)对道路交通信号灯进行检测和识别。实验结果表明,该系统能够在复杂的环境中准确地检测和识别道路交通信号灯,具有较高的实用价值。道路交通信号灯是道路交通管理的重要组成部分,它能够有效地组织交通,提高道路通行效率,保障交通安全。

qq_59747472的博客 340

Shell排序算法

Shell排序算法是D.L.Shell 于1959年发明的。其基本思想是:先比较距离远的元素,而不是简单交换排序算法那样先比较相邻的元素。这样可以快速减少大量的无序情况,从而减轻后续的工作。被比较的元素之间的距离逐步减少,直到减少为1,这时排序变成了相邻元素的互换。 /*shellsort:sort v[0]...v[n-1] into increasing order*/#inc...

aochi3003的博客 155

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

shell中的排序算法

shell中的排序算法 冒泡排序法 类似旗袍上涌的动作,会将数据在数组中从小大大或者从大到小不断的向前移动。 基本思想: 冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。 算法思路 冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中

weixin_44938203的博客 1950

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Shell 排序算法(递减增量排序算法)

/* * Shell 排序算法在 1959 年由 D. Shell 发明。 * 也称为递减增量排序算法,各种实现在如何进行递减上有所不同。 * 不稳定,不需要辅助空间。 */ /* * Gonnet 算法,发表于 1991 年。 */ int shellsortGo(int p[],int n) {    int op=0;    int h,i,j,temp;    for(h=n; h>1;

lionkid的专栏 1565

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

shell编程之多种排序算法及实现代码

文章目录前言排序算法之冒泡排序算法介绍脚本演示排序算法之快速排序算法介绍脚本演示排序算法之插入排序算法介绍脚本演示排序算法之计数排序算法介绍脚本演示 前言 对数据进行分析的时候经常需要对数据进行序处理,比如按占用CPU的时间对进程进行排序、按出现的次数频率对数据排序、按大小对数据进行排序。当然对数据排序我们可以使用sort命令,而这次我们介绍的是通过编写shell排序脚本对,对数据进行自定义排序...

小叮当的博客 2329

Java实现Shell排序算法

Shell排序算法

【逸辰杳】的博客 2307

C语言写的Shell排序算法。

shell排序的思想是根据步长由长到短分组,进行排序,直到步长为1为止,属于插入排序的一种。shell排序是对插入排序的一个改装,它每次排序把序列的元素按照某个增量分成几个子序列,对这几个子序列进行插入排序,然后不断的缩小增量扩大每个子序列的元素数量,直到增量为一的时候子序列就和原先的待排列序列一样了,此时只需要做少量的比较和移动就可以完成对序列的排序了. 下面用个例子更好的理解一

schoolers的专栏 4926

SHELL排序算法

// ShellSort.c #include #include #include #define DATA_TYPE int #define NUM_TYPE char // 有效个数:2至255 // ( ( 2 ^ ( sizeof ( unsigned NUM_TYPE ) * 8 ) ) - 1 ) #define LIMIT ( ( 1 << ( sizeof ( uns

GNU计划的专栏 773

shell排序算法的实现

根据资料和自己要求修改的shell排序

gongganji的博客 147

排序算法之shell排序

基本流程: 1.将数组中的n个元素分为n/2的序列,即第1个元素跟第n/2+1个元素组成一对,第2个元素跟第n/2+2个元素组成一对....... 2.每次循环让每一个循环对都按小在前大在后排序好 3.将数组中n个元素变为n/4(n/8,n/16......)的序列,再次跟步骤1进行类似排序 4.重复上述过程,直到将数组最后分为1的序列时,完成排序 //随机生成数组并实现shell排序...

权世界的博客 472

Java常见排序算法之Shell排序

在学习算法的过程中,我们难免会接触很多和排序相关的算法。总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的。 从今天开始,我们将要进行基本的排序算法的讲解。Are you ready?Let‘s go~~~ 1、排序算法的基本概念的讲解 时间复杂度:需要排序的的关键字的比较次数和相应的移动的次数。 空间复杂度:分析需要多少辅助的内存。 ...

weixin_30655219的博客 120
上一篇: 插入排序算法
下一篇: java枚举
lyl130
博客等级 码龄18年 0粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值