常见排序算法–直接插入法vs希尔排序法

首先,我们通过一个例子来了解直接插入算法

例如,对原始数组{15,24,3,49,10}进行直接插入排序(由小到大进行排序)

第一个数15无法比较,第二个数24与15比较,不做改变,第三个数3先后与24,15进行比较移到24的前面,第四个数49先后与24,15,3进行比较49不做改变,10分别与49,24,15,3相比,10移到3的前面。

如下

初始态 数15 数24 数3 数49 数10
第一步排序后 15 24 3 49 10
第二步排序后 3 15 24 49 10
第三步排序后 3 15 24 49 10
第四步排序后 3 10 15 24 49
//将每个数与前面数组依次比对,知道这个数排到合适的位置
void insert(int a[],int n)
{for(i=1;i<n;i++){//依次比对,直到该值大于数组中比较的值,后面的数组依次后移。for(j=i-1;j>=0;j--){if(a[i]<a[j]){a[j+1]=a[j];}else{a[j+1]=a[i];break;}}if(j==-1&&a[i]<a[j+1])a[0]=a[i];//对(j==-1&&a[i]<a[j+1)进行单独分析}
}

希尔排序法:我们也通过一个例子来了解希尔排序法

如下一个无序数组(12 35 20 67 3)

首先进行第一次希尔排序,将数组每两个为一组,则{a[0],a[2],a[4]}为一大类进行直接插入排序,将{a[1],a[3]}为一类进行直接插入排序

然后进行第一次希尔排序,将数组每1个分为一组(就是直接插入排序),则{a[0],a[1],a[2],a[3],a[4]}进行直接插入排序.过程如下图。

初始状态 12 35 20 67 3
两个一组排序
排序前 12 20 3
35 67
排序后得到 3 12 20
35 67
整理 3 35 12 67 20
一个一组进行排序
排序前 3 35 12 67 20
排序后 3 12 20 35 67

代码如下

//分为两种情况,依次比较a[i]与a[j],a[j-k],a[j-2k],a[j-3k]...的值,直到a[i]>a[j]或者j<0;
void xier(int a[],int n,int v)//引入的v指的是分组的标准间隔,该算法表示经过一个间隔为k的希尔排序。
{for(i=v;i<n;i++){j=i-v;while(a[j]>a[i]&&j>=0){a[j+v]=a[j];j-=v;}a[i]=a[j+v];}
}

常见排序算法2–直接插入法vs希尔排序法相关推荐

  1. 【排序算法】python 十大经典排序算法(全网最详)

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算法有:插入排序.希尔排序.选 ...

  2. 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...

    掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...

  3. 希尔排序是一种稳定的排序算法_全面解析十大排序算法之四:希尔排序

    点击上方蓝字关注我们吧 1. 十种排序算法的复杂度和稳定性 时间复杂度:一个算法消耗所需要的时间 空间复杂度:运行一个算法所需要的内存时间 稳定性:如一个排列数组:1.4.5.6.4.7. 此时有一对 ...

  4. 【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析

    [排序算法]冒泡排序.简单选择排序.直接插入排序比较和分析 写在前面: 本文简单介绍了冒泡排序.简单选择排序.直接插入排序,并对这三种排序进行比较,入参都是80000个随机数,比较算法耗时.进一步,我 ...

  5. 九大排序算法告诉你什么是内部排序和外部排序

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们通常所说的排序算法往往指的是内部排序算法, ...

  6. 排序算法的稳定性 (什么样的排序是不稳定的)

    有两个6,a[0]和a[3].排序结果就有两种可能: 如果排序结束后,a[0]可以保证一定在a[3]前头,也就是他们原有的顺序不变,那这种排序算法就是稳定的.(比如常见的冒泡排序.基数排序.插入排序. ...

  7. ds排序--希尔排序_图解直接插入排序和希尔排序

    前言 这次我们介绍插入类排序中的 直接插入排序 和 希尔排序 . 对于直接插入排序,虽然它的时间复杂度也是 O(n^2) ,但是在元素 有序或近乎有序 的情况下,时间复杂度可以降为 O(n) ,效率比 ...

  8. 希尔排序增量怎么确定_Python实现希尔排序(已编程实现)

    希尔排序: 观察一下"插入排序":其实不难发现她有个缺点: 如果当数据是"5, 4, 3, 2, 1"的时候,此时我们将"无序块"中的记录插 ...

  9. 数据结构排序系列详解之二 希尔排序

    接着上一篇博客,这篇要介绍的是希尔排序(缩小增量排序法). 希尔排序:通过比较相距一定间隔的元素来工作:各趟比较所用的距离(增量)随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止.是插入排序 ...

最新文章

  1. 的确好用!Python数据科学速查表中文版强势来袭!
  2. 吴裕雄--天生自然 PYTHON3开发学习:输入和输出
  3. 部署并使用Docker(Alibaba Cloud Linux 2)
  4. SiteMapCreator 发布 (Open Source)
  5. c++导出标准win32格式的dll
  6. 一个水杯居然能引出这么多测试点
  7. jQuery 学习笔记 事件委派
  8. cad对计算机专业的用处,CAD软件的特点和用途
  9. 机器学习笔记之概率图模型(八)信念传播(Belief Propagation,BP)(基于树结构)
  10. 切身体验苹果Reminders的贴心设计
  11. onu搭建php,ONU的简单操作和故障排查
  12. C# 如何在Word文档中插入艺术字
  13. 怎么查服务器域名 mac系统,苹果6s肿么查看服务器域名
  14. 学python好就业吗?
  15. 微信小程序抓包教程:Burpsuite版 附所需工具
  16. android微信支付问题总结
  17. vue手脚架配置请求头
  18. 树莓派控制继电器开关工作
  19. 虚拟服务器网址怎样查看,虚拟主机的ip地址怎么查
  20. Error creating document instance. Cause: org.xml.sax.SAXParseException报错解决

热门文章

  1. 什么是GPIO的推挽输出和开漏输出
  2. 微信小程序清空input内容
  3. 第十六篇:庄家的做盘思维
  4. 如何用开源OA办公开发平台,快速搭建一个企业门户
  5. 短视频APP白热化,泛娱乐社交热度不减
  6. oracle数据库,行列转换
  7. 当RESET信号到来时,CPU有何特点
  8. Java字节码增强技术
  9. 利用Python进行数据分析第二版复现(九)
  10. jodd.cache.LRUCache: 小巧的本地缓存, 及其并发bug