python基础算法 2021-1-11

选择排序

#快速排序
def kuaisu(a,low,high): 
    if low>high:
        return
    left=low
    right=high
    flag=a[low]
    while(left<right):
        while  (right>left and a[right]>=flag):
            right-=1
        a[left]=a[right]
        while(right>left and a[left]<flag):
            left+=1
        a[right]=a[left]
    a[left]=flag
    kuaisu(a,low,left-1)
    kuaisu(a,right+1,high)
a=[1,5,3,6,7,2,1]
kuaisu(a,0,len(a)-1)

思路
1.先确定一个基准数(flag),通常为第一个元素。将left指向第一个元素,right指向最后一个元素。
2.从右边开始,向前遍历找到第一个小于基准数的元素,下标为right,赋值给left指向的节点
3.left不动,从左边开始,向后遍历找到第一个大于基准数的元素,下标为left,赋值给right指向的节点
4.重复2,3直到left==right时停止,此时将基准数赋值给下标为left(right)的节点。此时基准数左边的数都比他小,右边都比他大。
5.将基准数左边的数组段,和右边的数组段分别重复1,2,3,4,5(递归)操作。
注意点:
1.递归的结束条件是传入的开始下标大于等于结束下标
2.出现与基准数相同的数,当作大于基准数处理

希尔排序

def Xier(a):
    length=len(a)
    grad=length//2
    while (grad>0):
       for i in range(grad,length):
           j=i
           flag=a[i]
           while j>grad and a[j-grad]>a[j]:
                a[j]=a[j-grad]
                j-=grad
                a[j]=flag
       grad//=2

a=[1,5,2,7,3]
Xier(a)
print(a)
           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值