数据结构_排序_直接插入排序+希尔排序

其实主要是为了讲述希尔排序,不过插入排序是希尔排序的基础,因此先来讲直接插入排序。

一、直接插入排序

1、原理

下标

0

1

2

3

4

5

6

7

8

--

tmp

2

5

7

3

6

8

4

1

假设数组为A,i为当前元素下标,则A[i]为当前元素的值

从下标i=2开始循环,与自己之前的元素比较大小(默认自己之前的序列已经是有序(升序))

A[i] > A[i-1],则不需要和i-2,i-3...等比较了,因为i-1已经是前面这些元素中最大的了

A[i] < A[i-1],那就循环继续和i-2,i-3...比较,直到A[i] > A[i-?]的时候,跳出循环

所有这些操作,其实都是在一个数组中进行位置的交换,下面来看看代码:

直接插入排序时间复杂度为O(n^2),在 数据基本有序+记录数较少 的情况下会有较好的表现

二、优化 直接插入排序 至 希尔排序

当年D.L.Shell(希尔排序的发明者)苦想怎么才能让待排序的数据基本有序+记录数少,结果脑洞大开,决定把数据多次(分组+组内插入排序),那这样每次分组就是实现记录数少的目标,多次分组那就可以慢慢实现整个数据集基本有序

结果弄着弄着就给整出一个时间复杂度更低的排序算法,嘿嘿~

1、多次分组=>基本有序?如何实现?很重要!

看到上图,相信各位就能体会那句“多次分组就可以慢慢实现整个数据集基本有序”了!

请思考!如果就分组一次,那组内有序后,还要组与组之间有序,否则不能做到整个数据集基本有序!!(所以应该多次跳跃式分组)

三、希尔排序

根据以上的理论,相信大家都明白希尔排序的原理了,我们现在来看看代码:

“增量”到底设置成多少?到目前为止,貌似没有什么特别好的办法,各位就先采用已经有的代码的模式吧

希尔排序python 简书_数据结构_排序_直接插入+希尔排序相关推荐

  1. 希尔排序python 简书_排序:希尔排序(算法)

    文 | 莫若吻 (注:如果想更好的理解希尔排序,请先看看我的上一篇博客插入排序,希望会对你有帮助.) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩 ...

  2. python 排序算法 简书_Python---简析八大排序算法

    前言 1 .排序的概念 排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列. 排序分为内部排序和外部排序. 若整个排序过 ...

  3. 数据结构java教学计划编排_数据结构课程设计_教学计划编制问题

    数据结构课程设计_教学计划编制问题 (教学计划编制问题)目 录1.需求分析 -------.3-52.概要设计 -------.6-83.详细设计 ------ 8-134.调试分析 ------ 1 ...

  4. python 简书_python爬取简书网文章的方法

    python爬取简书网文章的方法 发布时间:2020-06-30 14:37:08 来源:亿速云 阅读:100 作者:清晨 这篇文章主要介绍python爬取简书网文章的方法,文中示例代码介绍的非常详细 ...

  5. 遗传算法 python 简书_遗传算法入门

    遗传算法简介: 遗传算法(Genetic algorithm)属于演化计算( evolutionary computing),是随着人工智能领域发展而来的一种智能算法.正如它的名字所示,遗传算法是受达 ...

  6. 遗传算法 python 简书_基于DEAP库的Python进化算法从入门到入土—(二)简单遗传算法实现...

    前言 在上一篇中,我们已经介绍了如何在DEAP中实现进化算法的基本操作,在这一篇中我们试图将各个操作组装起来,用进化算法解决一个简单的一元函数寻优问题. 进化算法实例 - 一元函数寻优 问题描述与分析 ...

  7. 电影推荐系统 python简书_【记录|Spark】简单的电影推荐系统

    为了学习spark,在实验楼上找到的一个spark入门课程,在此记录一下学习过程. 我使用的Spark版本为Spark 2.2.0, 实验楼教程使用的是Spark 1.6.1 流程和算法介绍 这个简单 ...

  8. 电影推荐系统 python简书_分析9000部电影|一个简单的电影推荐系统

    不知道大家平时喜不喜欢看电影来消遣时光,我是比较喜欢看电影的.对我而言,当我看完一部电影,觉得很好看的时候,我就会寻找类似这部电影的其他电影.刚好有这么一个数据集,包含了很多部的电影,于是打算对其进行 ...

  9. 文科生学python简书_文科生Python教程(一)

    往期传送门:文均:文科生Python教程(零)​zhuanlan.zhihu.com (一)变量是什么?变量是个礼物盒! 在讲礼物盒之前,先帮张三解决他的问题. 在教程(零)中,张三想要统计<兰 ...

最新文章

  1. Swing如何正确的处理界面中的线程(EDT)
  2. 新型机器学习算法:正则化理解
  3. python post有随机字符串_如何用python requests post一段字符串
  4. fastjson导致的OOM
  5. socket编程五种模型
  6. 马云融资80亿美金的“资本”
  7. c语言用参数确认递归,C语言程序设计(第4章函数)3
  8. android 中管理短信
  9. 用户画像案例一:汽车精准营销
  10. GetSystemInfo
  11. ecs云服务器 mysql经常自动停止挂掉重启问题分析
  12. docker-compose nginx + ssl配置
  13. Fc冒险岛JAVA源码_FC冒险岛金手指
  14. 职称计算机ppt2003窍门,PowerPoint2003使用技巧集锦(4)
  15. 信创操作系统--统信UOS桌面版(多媒体软件:图像查看、处理,音频播放、录音机)
  16. Java 11中文版 API参考文档(收藏)
  17. 2021-03-26 大数据技术对企业管理的影响和应用前景分析
  18. MySQL原理与实践(五):数据库的锁机制
  19. ValueError: only single character unicode strings can be converted to Py_UCS4, got length 0
  20. 【SegNet】 A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation

热门文章

  1. 网站如何进行渠道跟踪_网站前期要如何进行SEO优化?
  2. mac 下php,Mac 下 PHP
  3. linux使用jinja2模板_linux下安装python组件之jinja2
  4. beoplay耳机序列号查询_BO Beoplay E8评测:真正无线耳机,可自定义EQ设置和透明模式!...
  5. php yaf 教程,干货:PHP YAF框架实践教程——配置与多模块
  6. python 编程提高效率_15 个提高效率的 Python 编程技巧
  7. mysql账户最小授权_mysql 创建帐号并授权
  8. Win10安装GPU版tensorflow和keras
  9. [Unity脚本运行时更新]C#7.3新特性
  10. [Unity脚本运行时更新]C#7新特性