python算法9.7——二分法插入排序

前提:二分法查找

# 二分法查找,又称对半查找,是一种较为高效的简单查找方法,且要求元素采用顺序存储结构
# 原理:
# 1.查找指定元素是否在前半部分序列,不在则查找是否在后半部分序列
# 2.若元素在序列中,则将序列再次分割,重复1
# 3.知道找到满足条件的记录,后者子序列不存在,即不包含元素

import random
Range = 10
Length = 5
dst = 5
flag = 0

list = random.sample(range(Range),Length)    #在指定序列中随机获取指定长度片段
list.sort()
print('sorted list:',list)

low = 0
high = Length-1

while low<=high:
    mid = (low+high)//2
    if list[mid] == dst:
        flag = 1
        break
    elif list[mid] > dst:
        high = mid - 1
    elif list[mid] < dst:
        low = mid + 1

if flag:
    print('5在第',mid+1,'位')
else:
    print("错误查询")


二分法插入排序

# 二分法插入排序是在插入排序的基础上,使用二分法查找将元素插入的方法
# 基本原理:(升序)
# 1.将元素依次放入有序序列中
# 2.取出待排序元素,与有序序列的前半段进行比较
# 3.缩小有序序列范围,进一步划分比较,直至范围内仅有1或2个数字
# 4.将插入值与范围进行比较
# 3.重复实现升序
# 实现过程:外层循环控制循环次数,中层循环实现有序排列,内层循环实现查找插入
import random

# 生成序列
Range = 10
Length = 5
list = random.sample(range(Range),Length)
print('before sort:',list)

# 元素插入
for i in range(1,Length):            #从第2个元素开始,插入到前一部分元素中
    beg,end = 0,i-1                  #定义插入范围
    mid = (beg + end) // 2           #定义二分/中间边界

    while beg < end:                #当边界顺序时,进行二分比较
        mid = (beg + end) // 2
        if mid == beg:               #如果中间值与边界相等,则边界已确定,结束二分
            break
        #在确定中间与边界不相等时,对边界继续缩小
        if list[i] == list[mid]:
            break
        elif list[i]

二分插入排序的原理较为简单,但是二分边界的确定以及范围比较的实现较为繁琐

你可能感兴趣的:(python算法,python,算法)