• 排序算法之 冒泡排序及性能优化(时间复杂度+空间复杂度分析)
  • 排序算法之 简单选择排序及时间复杂度分析
  • 排序算法之 直接插入排序及时间复杂度分析

希尔排序

算法思想:将整个待排序列分割成若干个子序列(由相隔增量个元素组成),分别进行直接插入排序,然后依次缩小增量再进行排序,待整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序。
希尔排序的实现应该由三个循环完成
(1)第一次循环,将增量d依次折半,直到增量d=1
(2)第二三层循环,也就是直接插入排序所需要的两次循环。

算法实现

#include <stdio.h>
#define N 9int main(void)
{int arr[N] = {9,1,5,8,3,7,4,6,2};int d = N / 2; //增量先取一半int i,j,insertVal;//希尔排序三层循环while(d>=1) //当增量大于等于1,不断进行插入排序{//一下两层for循环是直接插入排序代码for(i=d; i<N; i++){insertVal = arr[i];j = i - d;while(j>=0 && arr[j]>insertVal){arr[j+d] = arr[j];j = j - d;}arr[j+d] = insertVal;}d = d / 2;}for(i=0; i<N; i++){printf("%d ",arr[i]);}return 0;
}

由如上代码知,希尔排序的关键并不是随便分组后各自排序,而是将相隔某个增量的记录组成一个子序列,实现跳跃式移动,使得排序的效率高。

时间复杂度

时间复杂度为O(n^1.5),要好于直接排序的O(n ^ 2),需要注意的是增量序列的最后一个增量值必须是1.另外由于记录跳跃式的移动,希尔排序并不是一种稳定的排序方法。

排序算法 之希尔排序及时间复杂度分析相关推荐

  1. 排序算法:希尔排序算法实现及分析

    希尔排序算法介绍 希尔排序是D.LShell 与1957年提出来的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2),希尔排序算法是突破这个时间复杂度的第一批算法之一.我们知道直接插入排序算法 ...

  2. C/C++排序算法(2)希尔排序

    常见排序算法总结(2)希尔排序 一篇文章,带你搞懂 希尔排序 (注:代码语言的选择不应该限制了我们对算法的理解) 文章附有动图!一看就懂! (1)工作原理 希尔排序,也称递减增量排序算法,是插入排序的 ...

  3. 经典排序算法之希尔排序

    排序:希尔排序(算法) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序. 希尔排序是非稳定排序算法. 希尔排序因DL.Shell于1959 ...

  4. JAVA排序算法之希尔排序

    基本介绍 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序法基本思 ...

  5. [算法]-排序算法之希尔排序

    希尔排序算法思想 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序. 基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序 ...

  6. 排序算法之希尔排序(Java实现)

    希尔排序介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序基本思想 ...

  7. 排序算法(4)希尔排序

    排序算法(4)希尔排序 原理: 希尔排序也称缩小增量排序:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序, 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时(用gap ...

  8. php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识

    插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率. 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位. 希尔排序按其设计者希尔(Donald Shell)的 ...

  9. 常见排序算法之希尔排序

    文章目录 1.概述 2.希尔排序之交换法 3.希尔排序之移动法 4.测试案例 1.概述 由于简单的插入排序每次数据量变多的时候,数据需要移动且交换数据的次数也会变多,继而影响效率.希尔排序就是在这个基 ...

最新文章

  1. Android 自定义debug.keystore
  2. pandas isnull 函数
  3. Codeforces 989C (构造)
  4. EF通用数据层封装类(支持读写分离,一主多从)
  5. Python MySQL创建表
  6. 堆栈在DNA计算机中的应用,堆栈和二叉树数据结构在DNA计算机中的设计与实现
  7. 大数据_Flink_数据处理_资源的分配和并行度测试---Flink工作笔记0013
  8. GitLab5.3修改项目仓库名称后wiki不能访问
  9. 支付弹出php,PHP微信公众号支付弹出“NaN:undefined”解决方法
  10. 360浏览器html在哪儿,360浏览器的收藏夹在哪_如何找到360浏览器收藏夹路径位置...
  11. java从菜鸟到巨佬的学习目标
  12. 计算机编程的好处,青少年学习编程的好处有哪些?
  13. 实用必备:可以迅速让你出口成章的英语短语
  14. 书籍_《未来世界的幸存者》阮一峰--2/5
  15. 微信每日早安推送,自定义推送名称,企业号推送非订阅号测试号,python源码,无需第三方多个网站注册、无第三方接口,无基础快速上不了手
  16. 黑苹果卡在白苹果不动_iphone5开机白屏中间黑苹果,卡住不动。
  17. python批量修改文件扩展名
  18. Springboot实现热启动、热部署
  19. LINUX防火墙开放端口,查看状态,查看开放端口
  20. python基础学习task09

热门文章

  1. 3rd TMA大数据营销案例征集赛正式启动,报名ing!
  2. boss是董卓的java游戏_武将列传世界BOSS董卓-殒命长安攻略
  3. 世界著名设计公司-网址介绍
  4. ps抠图技巧之图层样式
  5. 有哪些计算机语言可以爬虫,爬虫是干嘛的?用什么语言学爬虫好?
  6. SEPIC 单端初级电感转换器 稳压器 -- Zeta 转换器
  7. C# 很少人知道的科技
  8. python计算运动会某个参赛选手的得分。数据保存在文件中_为什么一定要考计算机二级证书?8个好处,考和没考区别有点大...
  9. python中encode和decode使用讲解与演示
  10. websocket 给服务端发送太长数据处理(The decoded text message was too big for the output buffer and the endpoint )