常见排序算法2–直接插入法vs希尔排序法
常见排序算法–直接插入法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希尔排序法相关推荐
- 【排序算法】python 十大经典排序算法(全网最详)
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算法有:插入排序.希尔排序.选 ...
- 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...
掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...
- 希尔排序是一种稳定的排序算法_全面解析十大排序算法之四:希尔排序
点击上方蓝字关注我们吧 1. 十种排序算法的复杂度和稳定性 时间复杂度:一个算法消耗所需要的时间 空间复杂度:运行一个算法所需要的内存时间 稳定性:如一个排列数组:1.4.5.6.4.7. 此时有一对 ...
- 【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析
[排序算法]冒泡排序.简单选择排序.直接插入排序比较和分析 写在前面: 本文简单介绍了冒泡排序.简单选择排序.直接插入排序,并对这三种排序进行比较,入参都是80000个随机数,比较算法耗时.进一步,我 ...
- 九大排序算法告诉你什么是内部排序和外部排序
概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们通常所说的排序算法往往指的是内部排序算法, ...
- 排序算法的稳定性 (什么样的排序是不稳定的)
有两个6,a[0]和a[3].排序结果就有两种可能: 如果排序结束后,a[0]可以保证一定在a[3]前头,也就是他们原有的顺序不变,那这种排序算法就是稳定的.(比如常见的冒泡排序.基数排序.插入排序. ...
- ds排序--希尔排序_图解直接插入排序和希尔排序
前言 这次我们介绍插入类排序中的 直接插入排序 和 希尔排序 . 对于直接插入排序,虽然它的时间复杂度也是 O(n^2) ,但是在元素 有序或近乎有序 的情况下,时间复杂度可以降为 O(n) ,效率比 ...
- 希尔排序增量怎么确定_Python实现希尔排序(已编程实现)
希尔排序: 观察一下"插入排序":其实不难发现她有个缺点: 如果当数据是"5, 4, 3, 2, 1"的时候,此时我们将"无序块"中的记录插 ...
- 数据结构排序系列详解之二 希尔排序
接着上一篇博客,这篇要介绍的是希尔排序(缩小增量排序法). 希尔排序:通过比较相距一定间隔的元素来工作:各趟比较所用的距离(增量)随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止.是插入排序 ...
最新文章
- 的确好用!Python数据科学速查表中文版强势来袭!
- 吴裕雄--天生自然 PYTHON3开发学习:输入和输出
- 部署并使用Docker(Alibaba Cloud Linux 2)
- SiteMapCreator 发布 (Open Source)
- c++导出标准win32格式的dll
- 一个水杯居然能引出这么多测试点
- jQuery 学习笔记 事件委派
- cad对计算机专业的用处,CAD软件的特点和用途
- 机器学习笔记之概率图模型(八)信念传播(Belief Propagation,BP)(基于树结构)
- 切身体验苹果Reminders的贴心设计
- onu搭建php,ONU的简单操作和故障排查
- C# 如何在Word文档中插入艺术字
- 怎么查服务器域名 mac系统,苹果6s肿么查看服务器域名
- 学python好就业吗?
- 微信小程序抓包教程:Burpsuite版 附所需工具
- android微信支付问题总结
- vue手脚架配置请求头
- 树莓派控制继电器开关工作
- 虚拟服务器网址怎样查看,虚拟主机的ip地址怎么查
- Error creating document instance. Cause: org.xml.sax.SAXParseException报错解决