【经典算法】希尔算法
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
希尔排序使用一个序列h1h2,...,ht,叫作增量序列(increment sequence)。只要h1=1,任何增量序列都是可行d,不过,有些增量序列比另外一些增量序列更好。在使用增量hk的一趟排序之后,对于每一个i我们有a[i]<=a[i+hk](这里不等式是有意义的);所有间隔hk的元素都被排序。此时称文件是hk排序的。希尔排序的一个重要性质是,一个hk排序的文件(此后将是hk-1排序的)保持它的hk排序性。事实上,假如情况不是这样的话,那么该算法也没有意义了,因为前面各趟排序的成果会被后面各趟排序的成果会被后面各趟排序给打乱。
hk排序的一般做法是,对于hk,hk+1,..,N-1中的各个位置i,把其上的元素放到i,i-hk,i-2hk,...中间的正确位置上。虽然这并不影响最终结果,但是仔细的观察显示出,一趟hk排序的作用就是对hk个独立的子数组执行一次插入排序。增量序列的一个流行(但是不好)的选择是使用Shell建议的序列:ht=⌊N/2⌋和hk=ht=⌊hk+1/2⌋。
代码如下:
void ShellSort(int a[], int n) {if (a == NULL) return n;for (int step = n / 2; step > 0; step /= 2) {for (int i = step; i <= n; i++) {int temp = a[step];int j = i;for (; j >= gap && temp < a[j - gap]; j -= gap)a[j] = a[j -gap];a[j] = temp;}} }
转载于:https://www.cnblogs.com/vincently/p/4761968.html
【经典算法】希尔算法相关推荐
- 经典排序算法 - 希尔排序Shell sort
经典排序算法 - 希尔排序Shell sort 希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分, 第一部分,希尔排序介绍 第二部分,如何选取关键字,选取关键字是希尔排序的关键 第 ...
- 十大经典排序算法-希尔排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 数据结构与算法笔记 —— 十大经典排序及算法的稳定性
一.十大经典排序算法 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全 ...
- 十大经典排序算法-快速排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 十大经典排序算法-归并排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 十大经典排序算法-冒泡排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 经典常用算法/常用算法思维---附伪代码以及实现
本篇文章旨在分享一些常用算法的伪代码以及部分算法的具体实现,后面也会更新我在刷算法题中学到的或者从别的地方看到的经典算法思维 本博客并不提供算法说明,算法证明,算法分析,算法测试等内容,只提供算法的伪 ...
- 【机器学习入门】图解超经典的KNN算法
出品:Python数据之道(ID:PyDataLab) 作者:Peter,来自读者投稿 编辑:Lemon 图解超经典的KNN算法 本文中介绍的机器学习算法中的一种监督学习的算法:KNN 算法,全称是 ...
- python用tsne降维_哈工大硕士实现了 11 种经典数据降维算法,源代码库已开放
网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA.MDS.LLE. ...
- 五大常用经典算法—回溯算法
原文作者:labuladong 原文地址:回溯算法套路详解 读完本文,你可以去力扣拿下如下题目: 46.全排列 51.N皇后 解决一个回溯问题,实际上就是一个决策树的遍历过程.你只需要思考 3 个问题 ...
最新文章
- MS_SQL_获取字符串最后出现的字符串及位置
- OVS datapath主流程分析(二十一)
- 【转载】哈希表的原理,真的很难弄懂么?
- 人工智能时代,Python机器学习及分析工具
- 线下课程推荐 | 知识图谱理论与实战:构建行业知识图谱 (第四期)
- Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Clien
- 410. Split Array Largest Sum 分割数组的最大值
- SUSE中LVM的使用心得
- JQuery中的一些重要方法
- 【script】python调用剪切板
- SSM药店管理系统的设计与实现答辩PPT模板
- 深度学习(一)神经网络中的池化与反池化原理
- 你写的api接口代码真是_百度AI接口之JavaAPI方式调用示例代码[持续完善中]
- HDU1317 —— 最长路+判断正环
- 写论文:证明非线性系统的稳定性
- HDU 5745 La Vie en rose (DP||模拟) 2016杭电多校联合第二场
- 通用流量办什么卡划算?告诉你三大运营商该如何选择?
- 聊聊路径规划算法—快速搜寻随机树算法
- python 使用摄像头监测心率
- robotframework基础入门:(3):找不到关键字的对应方法
热门文章
- 随便创建Servlet文件都出现,请求资源不可用的情况
- kafka 修改分区_kafka修改分区和副本数
- python strip_Python strip()方法
- 华为鸿蒙系统发展时间2021年,耗时八年打造国产系统,华为鸿蒙OS质疑声不断,它才是真正未来...
- java add方法实例_java.util.TreeSet.add()方法实例
- STM8单片机读取18B20温度传感器
- 将mysql中的数据库表导出和导入
- Android学习笔记(三)——Button之圆角、按压效果、点击事件
- 阿里云服务器——centos7下源码安装tomcat9
- Ubuntu16.04显卡驱动安装和Cuda安装