当前位置: 首页 > 编程日记 > 正文

数据结构之shell排序

希尔排序是插入排序的一种类型,也可以用一个形象的叫法缩小增量法。基本思想就是把一个数组分为好几个数组,有点像分治法,不过这里的划分是用一个常量d来控制。

这个0<d<n,n为数组的长度。这个算法有了插入排序的速度,也可以算是一个改进算法,在插入算法中,如果有一个最小的数在数组的最后面,用插入算法就会重最后一个

位置移动到第一个,这样就会浪费很大,使用这个改进的希尔排序可以实现数据元素的大跨度的移动。也就是这个算法的优越之处。

希尔排序算法的基本思想是:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各 组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…< d2<d1),即所有记录放在同一组中进行直接插入排序为止。该方法实质上是一种分组插入方法。

public static void ShellSort(int[] H) {
        int dk = 1;
        while (dk <= H.length / 3)
            dk = dk * 3 + 1;                          //确定增量的过程
        while (dk>= 1) {                             
            for (int i = dk; i <= H.length - 1; i = i + dk) {         //直接插入法
                 int x = H[i];
                int j = i - dk;                               
                for (; j >= 0&&x < H[j]; j = j - dk) {
                        H[j + dk] = H[j];                                    //   for (; j >= 0; j--) {if (x < H[j]) {H[j + 1] = H[j]; }  else break;}    对比一下,简便方法
                }
                H[j + dk] = x;
            }
            dk = dk / 3;                                                     //缩小增量,到1的时候是直接插入法。
        }
        for (int k : H) {
            System.out.print(k + " ");
        }      
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] H = { 4,  6, 3, 7, 21,  14, 28, 24, 31, 33, 2 };
        ShellSort(H);
    }

转载于:https://www.cnblogs.com/neversayno/p/5058174.html

相关文章:

2022-2028年中国高纯铜市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国高纯铜行业市场行业相关概述、中国高纯铜行业市场行业运行环境、分析了中国高纯铜行业市场…

【百度地图API】如何制作班级地理通讯录?LBS通讯录

原文:【百度地图API】如何制作班级地理通讯录&#xff1f;LBS通讯录摘要&#xff1a;班级通讯录必备的功能&#xff0c;比如人员列表&#xff0c;人员地理位置标注&#xff0c;展示复杂信息窗口&#xff0c;公交和驾车等。一般班级人员都不会超过300个&#xff0c;因为可以高效…

Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)...

《Windows Azure Platform 系列文章目录》 注意&#xff1a;本文介绍的是Global Azure (http://www.windowsazure.com)&#xff0c;如果你使用的是由世纪互联运维的Azure China&#xff0c;请参考下面的连接。 Azure China (8) 使用Azure PowerShell创建虚拟机&#xff0c;并设…

如何正确的学习Blender-入门到精通课程

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |大小解压后:17.8 GB 含课程文件 |时长:21小时 27分 在Blender中学习3D建模、材质、灯光、渲染和动画&…

Java学习总结:47(打印流)

打印流 打印流包含字节打印流(PrintStream)和字符打印流(PrintWriter)。 例&#xff1a;定义打印流工具类 package Project.Study.PrintStream;import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream;class PrintUtil{ …

npm err错误

npm ERR!无法安装任何包的解决办法 通过config命令&#xff1a; npm config set registry http://registry.cnpmjs.org转载于:https://www.cnblogs.com/owys/p/5058463.html

2022-2028年中国高纯锑行业市场全景研究及发展趋势分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国高纯锑行业市场行业相关概述、中国高纯锑行业市场行业运行环境、分析了中国高纯锑行业市场…

super返回不过来

class Fruit { String color "未确定颜色"; //定义一个方法&#xff0c;该方法返回调用该方法的实例 public Fruit getThis() { return this; } public void info() { System.out.println("Fruit方法"); …

使用Vuforia Unity构建增强现实应用

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:1.64 GB |时长:3h 36m 专门为特殊需求群体量身定制&#xff0c;他们隐藏的才能只需要揭开。 …

Java学习总结:48(System类对IO的支持)

System类对IO的支持 System类与IO有关的3个对象常量 No.常量类型描述1public static final PrintStream err常量显示器上错误显示2public static final PrintStream out常量显示器上信息输出3public static final IntputStream in常量键盘数据输入 我们最早使用的"Syste…

mac 端口转发方案

mac 端口映射 好坑 osx10.10mac移除了ipfw改用pfpf以前没用过 查文档mac的 pf语法&#xff0c;没有找到。bsd的倒是很全&#xff0c;心喜拿来一试。http://www.openbsd.org/faq/pf/rdr.html 试了bsd的几个example都不行。报语法错误pfctl: Syntax error in config file: pf rul…

2022-2028年中国钢轨探伤车行业市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国钢轨探伤车行业市场行业相关概述、中国钢轨探伤车行业市场行业运行环境、分析了中国钢轨探…

Java中的50个关键字

2019独角兽企业重金招聘Python工程师标准>>> Java中的50个关键字 关键字也称为保留字&#xff0c;是指java语言中规定了特定含义的标示符。对于保留字&#xff0c;用户只能按照系统规定的方式使用&#xff0c;不能自行定义。Java中有50个常用关键字&#xff1a; 与数…

javascript保留字

保留字不能被用作变量名或函数名。abstractbooleanbytecharclassconstdebuggerdoubleenumexportextendsfinalfloatgotoimplementsimportintinterfacelongnativepackageprivateprotectedpublicshortstaticsupersynchronizedthrowstransientvolatile注意&#xff1a;如果把关键字…

动画产业基础学习教程 Rad How to Class – Animation Industry Fundamentals

如何分类——动画产业基础 大小解压后&#xff1a;6.2G 含课程素材 1920X1080 mp4 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; 信息: 绘画技巧、解剖学、角色设计、透视和整体讲故事——这门为期6周的课程旨在聚焦于工作室正在寻找什么…

136. 只出现一次的数字(关于异或的使用)

136. 只出现一次的数字 给定一个非空整数数组&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 说明&#xff1a; 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗&#xff1f; 示例 1: 输入: [2…

C_str的入门级notes

嗯&#xff0c;受人所托&#xff0c;顺便整理的 英文渣 侵删。 // 注释的部分是解说(废话)和不怎么重(kǎo)要(ch)的 错误请指正 #include <stdio.h> #include <string.h> int main() {char str[] "sstr";// "sstr." s, s, t, r, \0// witho…

2022-2028年中国钢材市场投资分析及前景预测报告(全卷)

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国钢材行业市场行业相关概述、中国钢材行业市场行业运行环境、分析了中国钢材行业市场行业的…

IOS UITableView详解一数据展示 页面简单实现

为什么80%的码农都做不了架构师&#xff1f;>>> 一 UITableView简介 UITableView用于表格数据展示&#xff0c;是使用频率最高的控件。UITableView继承自UIScrollView&#xff0c;具有UIScrollView的所有特性。 二 UITableView的两种样式 2.1 UITableViewStylePlai…

Bulk_Collect_Performance 比较

上一篇讲到了调用集锦&#xff0c;这篇关注一下性能问题吧。 DECLARECURSOR c_tool_listISSELECT descr d1 FROM hardware;l_descr hardware.descr%type; BEGINOPEN c_tool_list;LOOPFETCH c_tool_list INTO l_descr;EXITWHEN c_tool_list%notfound;END LOOP;CLOSE c_tool_list…

Unity初学Shadergraph创建着色器学习教程

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:51节课(4h 44m) |大小解压后:2.55 GB 使用Unity Shadergraph创建游戏资产指南 初学者的Unity Sha…

Linux命令学习总结:hexdump

命令简介&#xff1a; hexdump是Linux下的一个二进制文件查看工具&#xff0c;它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看。 指令所在路径&#xff1a;/usr/bin/hexdump 命令语法&#xff1a; hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n leng…

Java学习总结:49(字符缓冲流:BufferedReader)

字符缓冲流&#xff1a;BufferedReader 在开始前先让我们来看一段代码 package Project.Study.IOSystem;import java.io.InputStream;public class Test4 {public static void main(String[]args)throws Exception{InputStream inputStreamSystem.in;StringBuffer bufnew Str…

2022-2028年中国干洗行业市场全景调研与投资前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国干洗行业市场行业相关概述、中国干洗行业市场行业运行环境、分析了中国干洗行业市场行业的…

成为优秀高级程序员的10个要点(转)

英文原文&#xff1a;10 Steps to become a Senior Software Engineer What 软件工程师的职业生涯要历经以下几个阶段&#xff1a;初级、中级&#xff0c;最后才是高级。这篇文章主要是讲如何通过 10 个步骤助你成为一名高级软件工程师。 Why 得到更多的报酬&#xff01;因为你…

count http://www.cplusplus.com/reference/algorithm/count/

// count algorithm example#include <iostream>#include <algorithm>#include <vector>using namespace std;//count 他查找一个元素出现的次数int main () {int mycount;// counting elements in array: int myints[] {10,20,30,30,20,10,10,20}; // 8…

Clip Studio Paint 高级着色学习教程

剪辑工作室颜料着色专业指南&#xff01; A Pro’s Guide to Coloring With Clip Studio Paint! MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:2.78 GB |时…

Java学习总结:50(扫描流:Scanner)

扫描流&#xff1a;Scanner Scanner类定义在java.util包中&#xff0c;所以此类是一个工具类&#xff0c;利用它可以方便地实现数据的输入操作。 Scanner实现了Iterator(迭代)接口与Closeable接口。 Scanner类中定义的常用方法如下&#xff1a; No.方法类型描述1public Scann…

圣杯和双飞翼布局

//圣杯布局-wrap设置padding/left right加相对定位 <!DOCTYPE html> <html lang"zh-CN"> <html> <meta charset"utf-8"> <meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"/> <title>&…

2022-2028年中国干电池制造行业产销需求与投资预测分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国干电池制造行业市场行业相关概述、中国干电池制造行业市场行业运行环境、分析了中国干电池…