博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分插入排序法-Python版
阅读量:2594 次
发布时间:2019-05-11

本文共 1094 字,大约阅读时间需要 3 分钟。

简介:

传统的插入法思想为:

1.从头开始,构建有序数列;

2.再将之后需要排序的数据从头至尾(或从尾至头)进行比较,插入到其相应的位置。

而二分插入排序法第一步与传统插入法相同,第二步而是采用二分查询的原理,一半一半去缩小需要寻找插入的位置使插入的最大循环步骤从n-1缩小至log2(n),对于大量数据的排序,相较于插入法速度可提升70%左右。

 

代码如下:

import mathimport timeimport randomlist_a=[random.randint(0,10000) for i in range(10000) ]# list_a=[random.randint(0,9) for i in range(100000) ]# list_a=[5,1,7,9,8,6,2,4,3]start_t=time.time()print('开始时间:',start_t)for i in range(1,len(list_a)):    temp=list_a[i]    # 阶段性初始化最大最小和中间值    min = 0    max = i - 1    mid = int((max + min) / 2)    while True:        if temp<=list_a[0]:  # 待插入数据和头数据比较            for j in range(i,0,-1):                list_a[j]=list_a[j-1]            list_a[min]=temp            break        if temp>=list_a[i-1]:  # 待插入数据和尾数据比较            break        if max-min==1: # 插入位置终结条件,最大和最小值序号差值为1            for j in range(i,max,-1):                list_a[j] = list_a[j - 1]            list_a[max] = temp            break        if temp>list_a[mid]: # 插入值比中间值大时,重置中间值和最小值            min=mid            mid=int((min+max)/2)        elif temp

 

PS:

由于示例需要展示运算过程并以便转换为其它代码,本例并未使用如insert等Python专有函数。

转载地址:http://hszfd.baihongyu.com/

你可能感兴趣的文章
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>