Shell Sort(希尔排序)
这个排序算法很厉害,我个人很喜欢这个算法,但算法的时间复杂度难计。算法对增量(这里也称作step(步长))的选择也需要注意,只记得个希尔增量的最坏情况为O(n^2)、Hibbard增量的最坏情况为O(n^3/2)(书上有证明),书上说Hibbard增量的希尔排序平均情形运行时间基于模拟的结果被认为是O(n^5/4),但暂时没人证明出这个结果。
算法的代码实现有许多种,我就把《数据结构与算法分析》上的代码用C++敲了几遍当做学习过了,顺便学习C++,记不得的时候再回来复习。
书《数据结构与算法分析》中给出的代码如下(希尔增量):
- #include <iostream>
- #include <vector>
- using namespace std;
- void ShellSort(vector<int>& nums) {
- for(int Increment = (int)nums.size()/2; Increment > 0; Increment /= 2)
- for(int i = Increment; i < (int)nums.size(); i++) {
- int j, temp = nums[i];
- for(j = i; j >= Increment; j -= Increment)
- if(temp < nums[j - Increment]) nums[j] = nums[j - Increment];
- else break;
- nums[j] = temp;
- }
- }
- int main() {
- int n;
- cin >> n;
- vector<int> nums(n);
- for(int i = 0; i < (int)nums.size(); i++)
- cin >> nums[i];
- ShellSort(nums);
- for(int i = 0; i < (int)nums.size(); i++)
- cout << nums[i] << ' ';
- return 0;
- }
Shell Sort(希尔排序)的更多相关文章
- 我的Java开发学习之旅------>Java经典排序算法之希尔排序
一.希尔排序(Shell Sort) 希尔排序(Shell Sort)是一种插入排序算法,因D.L.Shell于1959年提出而得名. Shell排序又称作缩小增量排序. 二.希尔排序的基本思想 希尔 ...
- 直接插入排序&希尔排序
1.直接插入排序 时间复杂度O(n2) 工作原理: 通过构建有序序列,对于未排序数据,在已排序的序列中,从后向前扫描,找到相应的位置并插入. 插入排序在实现上,在从后向前扫描的过程中,需要反复把已排序 ...
- 排序系列 之 希尔排序算法 —— Java实现
基本思想: 希尔排序的实质就是分组插入排序,又称缩小增量法. 将整个无序序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本 ...
- 八大排序算法之二希尔排序(Shell Sort)
希尔排序是1959 年由D.L.Shell 提出来的,相对直接排序有较大的改进.希尔排序又叫缩小增量排序 基本思想: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录 ...
- [算法] 希尔排序 Shell Sort
希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它的基本思想是: ...
- 希尔排序(Shell's Sort)的C语言实现
原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 希尔排序(Shell's Sort)又称“缩小增量排序”(Diminishing Incre ...
- 排序算法--希尔排序(Shell Sort)_C#程序实现
排序算法--希尔排序(Shell Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来非常困难 ...
- Python排序算法——希尔排序(Shell’s Sort)
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10793487.html 一.希尔排序(Shel ...
- 希尔排序Shell sort
希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分, 第一部分,希尔排序介绍 第二部分,如何选取关键字,选取关键字是希尔排序的关键 第一块希尔排序介绍 准备待排数组[6 2 4 1 ...
随机推荐
- 五分钟学Java:打印Java数组最优雅的方式是什么?
在逛 Stack Overflow 的时候,发现了一些访问量像安第斯山一样高的问题,比如说这个:打印 Java 数组最优雅的方式是什么?访问量足足有 220W+,想不到啊,这么简单的问题竟然有这么多 ...
- mybatis-01-简单概述基础点
1.mybatis的优点 mybatis:半自动化持久化框架 sql(专注数据)和java编码(专注业务)分离 可使用简单的xml或者注解用于配置和原始映射 将接口和java中的pojo映射成数据库中 ...
- IIS-反向代理简介
参考:https://www.williamlong.info/archives/5353.html 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后 ...
- ARM相关概念(学习目标、分类、商业模式及半导体公司、嵌入式处理器)
1.学习ARM的目标 (1)对比X86,8051汇编,从更底层的角度去理解相关知识 (2)为后续嵌入式课程做准备 (3)了解ARM的体系结构,能够看懂ARM汇编 2.ARM分类 (1)按照版本号分类: ...
- [1/100]Python安装
Python官方版本下载地址: https://www.python.org/downloads/release (上图为3.8.2网络安装版) 默认安装: pip Python安装模块 tkinte ...
- cc攻击怎么防御,如何防止cc攻击?
当我们访问一个网站时,如果网站页面越简单,访问速度越快,页面越漂亮,加载速度就越慢,因为要加载更多东西,服务器压力也会比较大.cc攻击就是利用这种弱点,使用大量代理服务器,对网站进行攻击,消耗网站服务 ...
- Draw.io--自认为最好用的流程图绘制软件
draw.io 是一个强大简洁的在线的绘图网站,支持流程图,UML图,架构图,原型图等图标.支持Github,Google Drive, One drive等网盘同步,并且永久免费.如果觉得使用Web ...
- Jekyll+Github个人博客构建之路
请参考: http://robotkang.cc/2017/03/HowToCreateBlog/
- python基础教程系列1-基础语法
最近在学习python,主要通过廖雪峰的python教程入门,看看自己能够花多少时间最快入门.通过写博客梳理自己的知识点,强化自己的记忆.总的学习思路是,快速学习一遍教程,然后做一些算法题目实践,再然 ...
- Centos610快照克隆后网络配置
VMware中安装的Centos610快照并克隆后网络配置 1.网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR ...