当前位置: 首页 > news >正文

排序算法(2)

在上节中,我们学习了直接插入排序法,本次我们来学习它的改进方法:折半插入排序法.

  折半插入排序是对直接插入排序算法的一种改进,折半插入排序与直接插入排序算法原理相同.只是,在向已排序的数据中插入数据时,采用折半查找(二分查找).先取已经排序的序列的中间元素,与待插入的数据进行比较,如果中间元素的值大于待插入的数据,那么待插入的数据属于数组的前半部分,否则属于后半部分。
与直接插入相比,折半插入改善了算法中比较次数的数量级大的问题,但是对于移动元素的时间耗费并没有改变,因此折半插入排序法的时间复杂程度还是O(n2),只是寻找插入位置时更省时间.

折半插入排序法的图例如下:

折半插入排序法的代码如下

def BinaryInsertSort(mylist):for i in range(1, len(mylist)):"""将当前元素暂存起来"""tmp = mylist[i]"""在当前位置之前的范围查找插入"""low = 0high = i - 1"""将范围折半再查找"""while low <= high:m = int((low + high) / 2)"""tmp比范围中点大,范围后半段作为新的查找范围"""if tmp > mylist[m]:low = m + 1else:"""tmp比范围中点小,范围前半段作为新的查找范围"""high = m - 1"""此时mylist[high]的元素比tmp小"""j = i - 1"""mylist[high]之后的元素往后挪一位"""while j >= high + 1:mylist[j + 1] = mylist[j]j -= 1"""将tmp放在mylist[high]之后"""mylist[high + 1] = tmpif __name__ == "__main__":mylist = [49, 38, 65, 87, 76, 13, 27, 49]BinaryInsertSort(mylist)print(mylist)

输出:

[13, 27, 38, 49, 49, 65, 76, 87]


http://www.mrgr.cn/news/70469.html

相关文章:

  • 基于深度学习的路面裂缝检测算法matlab仿真
  • go语言使用总结(持续更新)
  • 国标GB28181视频平台EasyCVR私有化部署视频平台对接监控录像机NVR时,录像机“资源不足”是什么原因?
  • Springboot如何打包部署服务器
  • 基于Python的网上银行综合管理系统
  • Mybatis-plus学习
  • 【Linux】网络编程2
  • mysql中数据不存在却查询到记录?
  • 数学与统计计算:Python math 与 statistics库基础教程
  • ima.copilot-腾讯智能工作台
  • Android 各个版本授予应用信息权限及单次弹窗确认权限
  • 每日算法练习
  • 海南华志亿星电子商务有限公司是真的吗?
  • 如何加密源代码?十条策略教你源代码防泄漏
  • 三种读取配置文件的方式
  • 基于卷积神经网络的桃子叶片病虫害识别与防治系统,vgg16,resnet,swintransformer,模型融合(pytorch框架,python代码)
  • Linux网络的基本设置
  • 为什么白帽SEO比黑帽SEO更值得坚持?
  • 大顶堆的基本操作
  • vivado+modelsim: xxx is not a function name
  • 吃透红利!AI绘画变现方法汇总|变现方式:哪一种最适合你?方法加实践,小白也能上手赚钱!
  • 创新体验触手可及 紫光展锐携手影目科技推出AI眼镜开放平台
  • 软件测试基础二十一(接口测试 数据库相关)
  • 解决编译 fast-lio-lc 算法时遇到的error方法
  • 2023年09月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析
  • 过程自动化的新黄金标准:Ethernet-APL