🐻作者: 芝士小熊饼干
📖 系列专栏: 数据结构-蓝桥杯-算法⭐
💪坚持天数:4天🤖
排序⭐
# 交换
def Swap(arr,i,j):
arr[i],arr[j]=arr[j],arr[i]
# //冒泡排序
def BubbleSort(arr):
n=len(arr)
for i in range(n):
for j in range (0,n-i-1):
if arr[j]>arr[j+1]:
# arr[j], arr[j+1] = arr[j+1], arr[j]
Swap(arr,j,j+1)
# 插入排序
def InsertSort(arr,n):
for i in range (1,n):
key=arr[i]
j=i-1
while(j>=0 and key<arr[j]):
arr[j+1]=arr[j]
j-=1
arr[j+1]=key
# 希尔排序
def ShellSort(arr):
n=len(arr)
gap=int(n>>1)
while gap>0:
for i in range(gap,n):
temp=arr[i]
j=i
while j>=gap and arr[j-gap]>temp:
arr[j]=arr[j-gap]
j-=gap
arr[j]=temp
gap=int(gap>>1)
# 希尔排序二
def ShellSort1(arr):
n=len(arr)
gap=n
while(gap>1):
gap=gap>>1
for i in range(0,n-gap):
end=i
tmp=arr[end+gap]
while(end>=0):
if(arr[end]>tmp):
arr[end+gap]=arr[end]
end-=gap
else:
break
arr[end+gap]=tmp
# 快排
###################################################################################################################################
def partition(arr,left,right):
pivot=left
index=pivot+1
i=index
while i<=right:
if arr[i]<arr[pivot]:
Swap(arr,i,index)
index+=1
i+=1
Swap(arr,pivot,index-1)
return index-1
def WabQuickSort(arr,left=None,right=None):
left= 0 if not isinstance(left,(int,float)) else left
right = len(arr)-1 if not isinstance(right,(int, float)) else right
if left<right:
partitionIndex=partition(arr,left,right)
WabQuickSort(arr,left,partitionIndex-1)
WabQuickSort(arr,partitionIndex+1,right)
return arr
########################################################################################################################################
# --------------------三数取中------------------------#
def GetMidIndex(arr,left,right):
mid=(left+right)>>1
if arr[left]<arr[mid]:
if arr[mid]<arr[right]:
return mid
elif arr[left]>arr[right]:
return left
else:
return right
else:
if arr[mid]>arr[right]:
return mid
elif arr[left]<arr[right]:
return left
else:
return right
# ____________________PartSort1________________#
# 挖坑法
def PartSort1(arr,left,right):
Index =GetMidIndex(arr,left,right)
Swap(arr,left,Index)
begin =left
end=right
pivot=begin
key=arr[begin]
while begin<end:
while(begin<end and arr[end]>=key):
end-=1
arr[pivot]=arr[end]
pivot=end
while(begin<end and arr[begin]<=key):
begin+=1
arr[pivot]=arr[begin]
pivot=begin
pivot=begin
arr[pivot]=key
return pivot
#____________________PartSort2_______________#
def PartSort2(arr,left,right):
Index =GetMidIndex(arr,left,right)
Swap(arr,left,Index)
begin =left
end= right
keyi=begin
while(begin<end):
# 找小
while(begin<end and arr[end]>=arr[keyi]):
end-=1
while(begin<end and arr[begin]<=arr[keyi]):
begin+=1
Swap(arr,begin,end)
Swap(arr,begin,keyi)
return begin
#____________________PartSort3_______________#
def PartSort3(arr,left,right):
Index =GetMidIndex(arr,left,right)
Swap(arr,left,Index)
keyi=left
prev=left
cur=left+1
while(cur<=right):
if arr[cur]<arr[keyi]:
prev+=1
if prev!=cur:
Swap(arr,prev,cur)
cur+=1
Swap(arr,keyi,prev)
return prev
# --------------------------快排主函数--------------------#
def QuickSort(arr,left,right):
if left>=right:
return
KeyIndex=PartSort3(arr,left,right)# 接口调用 (PartSort1,PartSort2,PartSort3)
#----小区间优化-----#
# if ((KeyIndex-1)-left)>13:
QuickSort(arr,left,KeyIndex-1)
# else:
# InsertSort(arr[left:],KeyIndex-1-left+1)
# if (right-(KeyIndex+1)>13):
QuickSort(arr,KeyIndex+1,right)
# else:
# InsertSort(arr[KeyIndex+1:],right-(KeyIndex+1))
############################################--测----试--##################################################################
arr = [64, 34, 25, 12, 22, 11, 90]
GetMidIndex(arr,0,len(arr)-1)
# # BubbleSort(arr)
QuickSort(arr,0,6)
print ("排序后的数组:")
for i in range(len(arr)):
print ("%d" %arr[i]),
货物摆放问题⭐
小蓝有一个超大的仓库,可以摆放很多货物
现在,小蓝有n箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高
小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上分别堆工w、H的货物,满足n=LXW X H
给定n,请问有多少种堆放货物的方案满足要求
例如,当n=4时,有以下6种方案: 1x 1x41x2x2、1x4x1、2X1x2、2x2x1、4x1x1
请问,当n=2021041820210418 (注意有16位数字)时,总共有多少种方案?
# 求出所有约数
n=2021041820210418
number=[]
i=1
while(i<=n):
if(n%i==0):
number.append(i)
i+=1
# 用循环去枚举符合条件的数
count=0
for L in number:
for W in number:
for H in number:
if(L*W*H==n):
count+=1
print(count)
总结:
快排的小区间优化,没有实现,货物摆放电脑没算出来。。。。。。。(大无语)