当前位置: 首页 > 图灵资讯 > 行业资讯> python插入排序的优化

python插入排序的优化

来源:图灵python
时间: 2024-06-24 13:32:35

当有序范围内有大量数据时,搜索数据的插入位置将非常耗时。

1、插入排序算法总是从有序区间搜索插入位置作为切入点。

2、需要插入的位置可以通过二分搜索快速确认,因此有一个插入排序算法的优化版本,也称为二分搜索插入算法。

实例

definsert_sort2(data_list):
'''
使用二分搜索函数确定要插入元素在有序范围内的插入位置
'''
count=0#统计循环次数
length=len(data_list)
foriinrange(1,length):#默认情况下,第一个位置的元素是已排序的范围,因此从1开始下标
print(data_list)
wait_insert_data=data_list[i]##等待插入元素
move_index=i
insert_index,count1=binary_search(data_list[0:i],wait_insert_data)#寻找插入位置
count+=count1#统计循环次数需要增加二分搜索的循环次数
whilemove_index>insert_index:#移动元素,直到待插入位置
count+=1
data_list[move_index]=data_list[move_index-1]
move_index-=1
data_list[insert_index]=wait_insert_data#插入操作
print(data_list)
print(f"总循环次数为{count}")
returndata_list


defbinary_search(data_list,data):
"""
输入:有序列表,以及要找到的数据data
输出:data应该插入有序列表的位置
count变量纯粹用于统计循环次数,在实际应用中可以去除。
"""
count=0
length=len(data_list)
low=0
high=length-1
##如果给定元素大于或等于最后一个元素,则插入最后一个元素位置的后部
##若小于第一个元素,则插入位置0
ifdata>=data_list[length-1]:returnlength,0
elifdata<data_list[0]:return0,0
insert_index=0
whilelow<high-1:
count+=1
mid=(low+high)//2#python中的除法结果默认用于浮点数取整数部分//
ifdata_list[mid]>data:
high=mid
insert_index=high
else:
low=mid
insert_index=low+1#如果值相同或大于mid,然后插入位置位于后面
returninsert_index,count

以上是python插入排序的优化方法,希望对大家有所帮助。更多Python学习指导:python基础教程

本文教程操作环境:windows7系统Python 3.9.1,DELL G3电脑。