JAVA排序算法之希尔排序
基本介绍
希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。
希尔排序法基本思想
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止
希尔排序法的示意图
代码实例
对有序序列在插入时采用交换法
public static void shellSort(int[] arr) {int temp = 0;int count = 0;// 根据前面的逐步分析,使用循环处理for (int gap = arr.length / 2; gap > 0; gap /= 2) {for (int i = gap; i < arr.length; i++) {// 遍历各组中所有的元素(共gap组,每组有个元素), 步长gapfor (int j = i - gap; j >= 0; j -= gap) {// 如果当前元素大于加上步长后的那个元素,说明交换if (arr[j] > arr[j + gap]) {temp = arr[j];arr[j] = arr[j + gap];arr[j + gap] = temp;}}}//System.out.println("希尔排序第" + (++count) + "轮 =" + Arrays.toString(arr));}
对交换式的希尔排序进行优化->移位法
public static void shellSort2(int[] arr) {// 增量gap, 并逐步的缩小增量for (int gap = arr.length / 2; gap > 0; gap /= 2) {// 从第gap个元素,逐个对其所在的组进行直接插入排序for (int i = gap; i < arr.length; i++) {int j = i;int temp = arr[j];if (arr[j] < arr[j - gap]) {while (j - gap >= 0 && temp < arr[j - gap]) {//移动arr[j] = arr[j-gap];j -= gap;}//当退出while后,就给temp找到插入的位置arr[j] = temp;}}}}
JAVA排序算法之希尔排序相关推荐
- 排序算法之希尔排序(Java实现)
希尔排序介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序基本思想 ...
- 经典排序算法之希尔排序
排序:希尔排序(算法) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序. 希尔排序是非稳定排序算法. 希尔排序因DL.Shell于1959 ...
- [算法]-排序算法之希尔排序
希尔排序算法思想 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序. 基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序 ...
- 排序算法:希尔排序算法实现及分析
希尔排序算法介绍 希尔排序是D.LShell 与1957年提出来的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2),希尔排序算法是突破这个时间复杂度的第一批算法之一.我们知道直接插入排序算法 ...
- C/C++排序算法(2)希尔排序
常见排序算法总结(2)希尔排序 一篇文章,带你搞懂 希尔排序 (注:代码语言的选择不应该限制了我们对算法的理解) 文章附有动图!一看就懂! (1)工作原理 希尔排序,也称递减增量排序算法,是插入排序的 ...
- 排序算法(4)希尔排序
排序算法(4)希尔排序 原理: 希尔排序也称缩小增量排序:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序, 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时(用gap ...
- php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识
插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率. 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位. 希尔排序按其设计者希尔(Donald Shell)的 ...
- 常见排序算法之希尔排序
文章目录 1.概述 2.希尔排序之交换法 3.希尔排序之移动法 4.测试案例 1.概述 由于简单的插入排序每次数据量变多的时候,数据需要移动且交换数据的次数也会变多,继而影响效率.希尔排序就是在这个基 ...
- 我的Java开发学习之旅------gt;Java经典排序算法之希尔排序
一.希尔排序(Shell Sort) 希尔排序(Shell Sort)是一种插入排序算法,因D.L.Shell于1959年提出而得名. Shell排序又称作缩小增量排序. 二.希尔排序的基本思想 希尔 ...
最新文章
- 洛谷 P1004 方格取数 【多线程DP/四维DP/】
- 获取标签的src属性兼容性
- mysql高精度类型_mysql中常见的数据类型
- MongoDB升级导致启动失败
- python模拟登记获取cookie_Python爬虫实战入门四:使用Cookie模拟登录——获取电子书下载链接...
- Jmail 发送邮件错误
- SharePoint 2013 禁用搜索服务
- 【自然语言处理】1.中文语言的机器处理
- curlopt_ssl_verifypeer后https还是验证不过_为什么 HTTPS 需要 7 次握手和 9 倍时延
- 【JeecgBoot】关于 jeecg-boot 的项目理解、使用心得和改进建议
- Python计算点到直线距离的两种方法
- 2016.12.10
- unison实现文件双向同步
- sms 短信通平台 发送短信
- 网站挂马危害及其防御措施
- 王阳明心学:此心光明,夫复何言
- 单点登录(4):单点登录实现(附源码)
- P2404 自然数的拆分问题(洛谷)
- Camtasia Studio2021-激活码-序列号-秘钥中文版下载安装最新详情介绍
- Ubuntu1804换源
热门文章
- Struts2-获取值栈对象与结构
- 【计算机IO系类】Java NIO
- jquery获取select选中的文本的值
- Visual C++——黄维通《 Visual C++面向对象与可视化程序设计》——例题9-3
- BugKuCTF 加密 这不是摩斯密码
- java顺序结构类型,Java类的完整构造执行顺序
- SpringSide 4 QuickStart运行Demo
- MyBatis-学习笔记03【03.自定义Mybatis框架】
- Vue.js-Day05【安装路由(vue-router)、如何使用vue-router、404配置、激活class、动态路由、编程式导航、路由嵌套、路由元信息、导航拦截】
- Android 原生通知Notification 写法