vlambda博客
学习文章列表

Python|理解折半插入排序

引言

插入排序中有直接插入排序,善于思考的能够发现该算法在进插入的时候是采用了顺序查找的方法,而在要查找的表中数据本身有序的前提下可以使用折半查找来代替顺序查找,这种排序的算法就是折半插入排序算法。


算法描述

本篇文章描述的是折半插入排序算法,折半插入排序算法的原理就是利用折半查找的方法来查找插入的位置,然后直接将需要的数据插入该位置就可以了。

第一步:先将需要排序的序列中的第一个数据看成是一个有序序列。

第二步:从第二个元素开始,逐个进行插入。

第三步:在插入的时候先使用折半查找在有序序列中找到该数据应该插入的位置,比较该数据与有序序列中的中间值大小。

给定一个序列为a[0], a[1], a[2]……a[i-1], a[i], a[i+1]……a[n-1]。假设前面i个元素已经是有序序列,现在将第i个元素插入其中,首先需要做的是找到插入元素的位置,然后再插入。

此时定义两个指针为low和high,low指向a[0],high指向a[i-1],使用折半查找,前面有序序列的中间值为a[mid],mid=(low+high)/2,则前面序列为a[0], a[1], a[2]…a[mid]…a[i-1]。将a[i]与a[mid]进行比较,若a[i]>a[mid] ,说明a[i]的位置就应该在mid和high之间,再在mid和high之间用相同方法进行查找。若a[i]< a[mid], 说明a[i]的位置就应该在mid和low之间,再在mid和low之间用相同方法进行查找。找到相应位置后就将该数据插入到该位置,这样就进行了一次折半插入排序。

例题:给定序列[5,2,6,0,9],对其进行排序

首先把5当成有序序列

1.此时mid5,将25做比较,25小,插在5前面

则为[25609]

2.6先与2比较,再与6比较得

  [25609]

3.0先与5作比较,比5小,则位置在5左边,再与2比较,比2小,则再2左边。

  [0256 9]

最后结果为[0256 9]

结语

以上就是对折半插入排序的简单讲解,其中需要注意的就是:在进行折半查找的时候要在有序序列中进行查找;折半查找是查找数据对有序序列的中间值进行比较。




主编:欧洋

稿件来源:深度学习与文旅应用实验室(DLETA)