1.递归选择排序
# 递归选择排序
def selectSort(arr,i):
if i == len(arr)-1: #递归出口
return
else: #子问题处理
Min = arr[i]
temp = i
for j in range(i+1,len(arr)):
if arr[j]< Min: #计算子问题最小值
Min = arr[j]
temp = j
if temp != i:
arr[temp],arr[i] = arr[i],arr[temp]
selectSort(arr,i+1) #抛给下一个子问题
#调用方法
arr = [2,3,1,7,1,3,4]
selectSort(arr,0)
print('递归选择排序后结果:',arr)
#结果:
"""
递归选择排序后结果: [1, 1, 2, 3, 3, 4, 7]
"""
2.全排列问题(固定位置放元素法)
# 固定位置放元素
def perm1(arr,m):
if m == len(arr)-1:
print(arr)
else:
for i in range(m,len(arr)):
arr[m],arr[i] = arr[i],arr[m]
perm1(arr,m+1)
arr[m],arr[i] = arr[i],arr[m]
arr = [i for i in range(3)]
perm1(arr,0)
#结果:
"""
[0, 1, 2]
[0, 2, 1]
[1, 0, 2]
[1, 2, 0]
[2, 1, 0]
[2, 0, 1]
"""
3.全排列问题(固定元素放位置法)
# 固定元素放位置
arr = [4,5,6]
index = [-1]*len(arr)
def perm2(index,m):
if m == len(index): #定义递归出口,当被排列元素索引越界时打印当前排列结果
print([arr[i] for i in index])
else: #抛出子问题:将索引为m的元素进行插空列举
for i in range(0,len(index)):
if index[i] == -1:
index[i] = m
perm2(index,m+1)
index[i] = -1 #将当前插入位置的索引清楚,准备将其插到下一个位置
perm2(index,0)
#结果:
"""
[4, 5, 6]
[4, 6, 5]
[5, 4, 6]
[6, 4, 5]
[5, 6, 4]
[6, 5, 4]
"""
4.二分查找
#二分查找
def binarySearch(arr,left,right,x):
while left <= right:
mid = int((left+right)/2) #中间值的索引
if arr[mid] == x:
return mid
elif arr[mid] > x:
right = mid - 1
else:
left = mid + 1
return -1
arr = [2,5,12,56,100,788,1234]
print(binarySearch(arr,0,len(arr),12))
print([binarySearch(arr,0,len(arr),x) for x in arr])
#结果:
"""
2
[0, 1, 2, 3, 4, 5, 6]
"""