直接插入排序和希尔排序

Posted 一件风衣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了直接插入排序和希尔排序相关的知识,希望对你有一定的参考价值。

昨天是个神奇的一天,妹妹来访,超开心!这一天神奇的事很多,首先光是没有下雨就已经很值得开心了!下午还在西湖附近,报警救助了一个似乎是刚脱离传销组织的姑娘?好人一生平安!(这些就是你拖稿一天的理由吗?)

直接插入排序

直接插入排序是经典的排序算法之一,在这个系列的第一章我们有提到,使用的是扑克牌排序的例子,今天我们就更深入的学习一下这个排序算法,也为后半段的希尔排序打下基础。

(一)直接插入排序思想

思想只有一句话:把一个数插入到一个有序数组的合适位置!

让我们再回想一下扑克牌的排序过程:

1.假设我们从左到右按照A,2,3……,J,Q,K的顺序来排列扑克牌,现在牌堆里有5张牌;

2.我们抽取第一张牌,是4,放入手中;

3.抽取的第二张牌是7,比4大,插入到4的右边;

4.抽取的第三张牌是A,比4小,插入到4的左边;

5.抽取的第四张牌是K,比7大,插入到7的右边;

6.抽取,的第五张牌是3,比A大,但是比4小,插入到A和4的中间;

7.排序完毕,我们得到的顺序牌组为A,3,4,7,K。

(二)直接插入排序图解

计算机不能做到和我们人类一样,一眼看到刚抓到手中的牌应该插入到什么位置,所以计算机需要从已经排好的牌组的最左边一直比较,直到比较到一个合适的位置,插入那个新牌。

我们以数组[5,7,3,1,8,4,2,6]为例,图解如下:

(六)直接插入排序和希尔排序

(三)直接插入排序可视化演示

(四)直接插入排序算法的Python实现




希尔排序算法

希尔排序的灵魂就是直接插入排序算法,在数组基本有序的时候,直接插入排序可以达到线性效率,但是如果数组是一般的,那么直接插入排序效率就很低,而希尔排序本质上就是一种分组的插入排序算法。

(一)希尔排序思想

希尔排序又叫作缩小增量排序,排序过程如下:

1.对于一个长度为n的待排数组,首先取一个比n小的增量d,这个增量的意思的是两个元素之间的间隔;

2.对于这个间隔d,我们把数组分为若干个子数组,对每个子数组进行直接插入排序;

3.缩小间隔d,重复步骤2和3,直到d为1时,完成直接排序时就得到了一个有序数组。

这个思想有点似乎从字面上理解来比较抽象,我们还是以图解的方式来解释这个过程,其实也很简单。

(二)希尔排序图解

依然以一个长度为8的数组[5,7,3,1,8,4,2,6]为例:

(六)直接插入排序和希尔排序

(三)希尔排序可视化演示

(四)希尔排序算法的Python实现


奉太郎说

希尔排序的核心思想就是构造基本有序这种特殊情况,每一次排序都很高效地向基本有序接近,最后进行直接插入排序效率就很高啦!

下一篇我们会一起学习类似的一对排序算法——简单选择排序和堆排序!





以上是关于直接插入排序和希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)

算法插入排序——希尔排序+直接插入排序

直接插入折半插入希尔排序

直接插入折半插入希尔排序

(王道408考研数据结构)第八章排序-第二节:直接插入排序和希尔排序