蓝桥杯Python->冒泡,插入,希尔 and 三种快速排序>货物摆放练习练习

🐻作者: 芝士小熊饼干
📖 系列专栏: 数据结构-蓝桥杯-算法⭐ 
 

💪坚持天数: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)

 总结:

 快排的小区间优化,没有实现,货物摆放电脑没算出来。。。。。。。(大无语)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝士小熊饼干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值