内容正文:
浙江高中技术培优算法(陶小波)
82
第十五章 大题算法
(一)数组合并(通过对分实现)
将 ls 数组中的值,插入到 ls2 中指定位置,插入结束了 ls2 中的值依然有序
原理:
第一步:将原始值直接排序
第二步:通过对分查找法查找到对应的值插入的位置
第三步:插入值
import random
ls=[random.randint(1,100) for i in range(5)]
ls2=[random.randint(1,100) for i in range(10)]
ls.sort()
ls2.sort()
for k in ls:
i,j,m=0,len(ls2)-1,0
while i<=j:
m=(i+j)//2
if k<ls2[m]:
j=m-1
else:
i=m+1
ls2.insert(i,k) #插入到数组中指定位置。第一个参数是位置第二个参数
是值
print(ls2)
浙江高中技术培优算法(陶小波)
83
(二)遍历当前列表所有排列组合
def showAllList(a):
n=len(a)
while True:
print(a)
i, j = -1, -1
for q in range(n - 1):
if a[q] < a[q + 1] and q > i:
i = q
if i == -1:
break
for q in range(n):
if a[q] > a[i] and q > j:
j = q
a[i], a[j] = a[j], a[i]
left, right = i + 1, n - 1
while left < right:
a[left], a[right] = a[right], a[left]
left += 1
right -= 1
a = [1, 2, 3]
showAllList(a)
当前结果如下: