java 中基本算法之希尔排序的实例详解
作者:lqh 发布时间:2023-07-30 12:26:37
标签:java,希尔排序
java 中基本算法之希尔排序的实例详解
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序, 然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
实例代码:
public class ShellSort {
/**
* 原理:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的
* 下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,
* 在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
*
* @author 阿信sxq-2015年7月16日
*
* @param args
*/
public static void main(String[] args) {
int a[] = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99, 98, 54,
56, 17, 18, 23, 34, 15, 35, 25, 53, 51 };
int d = a.length;
int temp = 0;
while (true) {
d = d / 2;
for (int x = 0; x < d; x++) {
//对每一个组进行直接插入排序
for (int i = x + d; i < a.length; i += d) {
int j = i - d;
temp = a[i];
for (; j >= 0 && temp < a[j]; j -= d) {
a[j + d] = a[j];
}
a[j + d] = temp;
}
}
if (d == 1) {
break;
}
}
System.out.println(Arrays.toString(a));
}
}
来源:https://my.oschina.net/songxinqiang/blog/669906


猜你喜欢
- 挂起和恢复线程 Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已
- 在很多场景下,maven不能直接访问到外网时,使用代理是其中常见的一种方式。这篇文章整理一下常见的maven中设置代理的方法。代理服务器代理
- 代理模式代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远
- 1.理解装箱简单地说,装箱就是将一个值类型的数据存储在一个引用类型的变量中。假设你一个方法中创建了一个 int 类型的本地变量,你要将这个值
- ListView和GridViewListView,列表视图,是Android中最重要的组件之一,几乎每个Android应用中都会使用Lis
- 前言在Java 8之前,默认情况下,接口中的所有方法都是公共的和抽象的。但是这一限制在Java 8中被打破了,Java 8允许开发人员在接口
- 基本环境:Android studio3.6NDK:r15c(尽量使用该版本)Opencv3.4.1 android sdk操作:(1)新建
- java 实现MD5加密算法的简单实例实现代码:import java.security.NoSuchAlgorithmException;
- route_generator是什么这是一个简单的 Flutter 路由生成库,只需要少量的代码,然后利用注解配合源代码生成,自动生成路由表
- 大家都知道为了防止我们的网站被有些人和黑客恶意攻击,比如我们网站的注册页面,如果我们在用户注册的时候不加上一个验证码框的话,别人就可以写一个
- import java.io.FileNotFoundException;import java.io.FileOutputStream;i
- 某些Google Play服务(例如Google登录和App Invites)要求我们提供签名证书的SHA-1,以便google paly为
- 主要从以下十几个方面对Hibernate做总结,包括Hibernate的检索方式,Hibernate中对象的状态,Hibernate的3种检
- Spring main方法调用Dao层和Service层的方法在web环境中,一般serviceImpl中的dao之类的数据库连接都由容器启
- 实例:用户输入一个日期,要求输出这个日期是星期几和在这一年中的第几天://声明一个DateTime类型的变量用于存放用户输入的日期DateT
- 最近在学习springboot,session这个点一直困扰了我好久,今天把这些天踩的坑分享出来吧,希望能帮助更多的人。一、pom.xml配
- 实际上,按一定速度读取摄像头视频图像后,便可以对图像进行各种处理了。那么获取主要用到的是VideoCapture类,一个demo如下://如
- 某天一朋友突然发来一个地址,问我怎么获取这张图片的后缀名??将代码放在下面以供参考:using System;using System.Dr
- 上一节我们了解了Lock接口的一些简单的说明,知道Lock锁的常用形式,那么这节我们正式开始进入JUC锁(java.util.concurr
- 闹钟闹不醒的可以自己去调整下,这个最是最基本的MainActivitypublic class MainActivity extends A