希尔排序python 简书_数据结构_排序_直接插入+希尔排序
数据结构_排序_直接插入排序+希尔排序
其实主要是为了讲述希尔排序,不过插入排序是希尔排序的基础,因此先来讲直接插入排序。
一、直接插入排序
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 简书_数据结构_排序_直接插入+希尔排序相关推荐
- 希尔排序python 简书_排序:希尔排序(算法)
文 | 莫若吻 (注:如果想更好的理解希尔排序,请先看看我的上一篇博客插入排序,希望会对你有帮助.) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩 ...
- python 排序算法 简书_Python---简析八大排序算法
前言 1 .排序的概念 排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列. 排序分为内部排序和外部排序. 若整个排序过 ...
- 数据结构java教学计划编排_数据结构课程设计_教学计划编制问题
数据结构课程设计_教学计划编制问题 (教学计划编制问题)目 录1.需求分析 -------.3-52.概要设计 -------.6-83.详细设计 ------ 8-134.调试分析 ------ 1 ...
- python 简书_python爬取简书网文章的方法
python爬取简书网文章的方法 发布时间:2020-06-30 14:37:08 来源:亿速云 阅读:100 作者:清晨 这篇文章主要介绍python爬取简书网文章的方法,文中示例代码介绍的非常详细 ...
- 遗传算法 python 简书_遗传算法入门
遗传算法简介: 遗传算法(Genetic algorithm)属于演化计算( evolutionary computing),是随着人工智能领域发展而来的一种智能算法.正如它的名字所示,遗传算法是受达 ...
- 遗传算法 python 简书_基于DEAP库的Python进化算法从入门到入土—(二)简单遗传算法实现...
前言 在上一篇中,我们已经介绍了如何在DEAP中实现进化算法的基本操作,在这一篇中我们试图将各个操作组装起来,用进化算法解决一个简单的一元函数寻优问题. 进化算法实例 - 一元函数寻优 问题描述与分析 ...
- 电影推荐系统 python简书_【记录|Spark】简单的电影推荐系统
为了学习spark,在实验楼上找到的一个spark入门课程,在此记录一下学习过程. 我使用的Spark版本为Spark 2.2.0, 实验楼教程使用的是Spark 1.6.1 流程和算法介绍 这个简单 ...
- 电影推荐系统 python简书_分析9000部电影|一个简单的电影推荐系统
不知道大家平时喜不喜欢看电影来消遣时光,我是比较喜欢看电影的.对我而言,当我看完一部电影,觉得很好看的时候,我就会寻找类似这部电影的其他电影.刚好有这么一个数据集,包含了很多部的电影,于是打算对其进行 ...
- 文科生学python简书_文科生Python教程(一)
往期传送门:文均:文科生Python教程(零)zhuanlan.zhihu.com (一)变量是什么?变量是个礼物盒! 在讲礼物盒之前,先帮张三解决他的问题. 在教程(零)中,张三想要统计<兰 ...
最新文章
- Swing如何正确的处理界面中的线程(EDT)
- 新型机器学习算法:正则化理解
- python post有随机字符串_如何用python requests post一段字符串
- fastjson导致的OOM
- socket编程五种模型
- 马云融资80亿美金的“资本”
- c语言用参数确认递归,C语言程序设计(第4章函数)3
- android 中管理短信
- 用户画像案例一:汽车精准营销
- GetSystemInfo
- ecs云服务器 mysql经常自动停止挂掉重启问题分析
- docker-compose nginx + ssl配置
- Fc冒险岛JAVA源码_FC冒险岛金手指
- 职称计算机ppt2003窍门,PowerPoint2003使用技巧集锦(4)
- 信创操作系统--统信UOS桌面版(多媒体软件:图像查看、处理,音频播放、录音机)
- Java 11中文版 API参考文档(收藏)
- 2021-03-26 大数据技术对企业管理的影响和应用前景分析
- MySQL原理与实践(五):数据库的锁机制
- ValueError: only single character unicode strings can be converted to Py_UCS4, got length 0
- 【SegNet】 A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
热门文章
- 网站如何进行渠道跟踪_网站前期要如何进行SEO优化?
- mac 下php,Mac 下 PHP
- linux使用jinja2模板_linux下安装python组件之jinja2
- beoplay耳机序列号查询_BO Beoplay E8评测:真正无线耳机,可自定义EQ设置和透明模式!...
- php yaf 教程,干货:PHP YAF框架实践教程——配置与多模块
- python 编程提高效率_15 个提高效率的 Python 编程技巧
- mysql账户最小授权_mysql 创建帐号并授权
- Win10安装GPU版tensorflow和keras
- [Unity脚本运行时更新]C#7.3新特性
- [Unity脚本运行时更新]C#7新特性