面试系列之排序必会

1、冒泡排序

def bubble(alist):
    for j in range(len(alist)-1,0,-1):
        flag = False
        for i in range(j): #一趟排序
            if alist[i]>alist[i+1]:
                alist[i],alist[i+1] = alist[i+1],alist[i]
                flag=True
        if flag==False:
            break
    return alist  
    
print(bubble([1,4,5,2,6,7]))

2、快速排序

def quicksort(q,l,r):
    if l>=r:
        return
    piovt=q[l];i=l+1;j=r
    done = False
    while not done:
        while i<=j and q[i]<=piovt:
            i+=1
        while j>=i and q[j]>=piovt:
            j-=1
            
        if i>j:
            done = True
        else:
            q[i],q[j]=q[j],q[i]
    q[l],q[j]=q[j],q[l]

    quicksort(q,l,j-1)
    quicksort(q,j+1,r)           
alist = [54,27,3,349,88,0,-2,90,897,-98,569,-968]
quicksort(alist,0,len(alist)-1)
print(alist)

3、插入排序

def  insertsort(q,n):
    for i in range(1,n):
        temp = q[i]
        j=i
        while(j>0 and q[j-1]>temp):
            q[j]=q[j-1]
            j-=1
        q[j]=temp
    
arr = [ 12, 11, 13, 5, 6,8,20,5] 
insertsort(arr,len(arr))
print(arr)

 一手扑克牌,不断起牌,往进插牌....


4、堆排序

def buildheap(q,size,u):
    t=u
    left=2*u+1
    right =2*u+2
    
    if(left<size and q[left]>q[t]):
        t=left
    if(right <size and q[right]>q[t]):
        t=right
    if(t!=u):
        q[t],q[u] = q[u],q[t]
        buildheap(q,size,t)
  
def heapsort(q):
    n=len(q)
    for i in range(n//2,-1,-1):
        buildheap(q,n,i)
       
    for j in range(len(q)-1,0,-1):
        q[0],q[j] = q[j],q[0]
        buildheap(q,j,0)
        
arr =[54,27,3,349,88,0,-2,90,897,-98]
heapsort(arr)
print(arr)

5、归并排序

def mergsort(q,n):
    if n==1 or n==0:
        return
    mid=n//2
    leftarr = q[:mid]
    rightarr = q[mid:]
    mergsort(leftarr,len(leftarr))
    mergsort(rightarr,len(rightarr))   
    i=0;j=0;k=0
    while(i<len(leftarr) and j<len(rightarr)):
        if(leftarr[i] < rightarr[j]):
            q[k]=leftarr[i]
            i+=1
            k+=1
        else:
            q[k] = rightarr[j]
            j+=1
            k+=1
    
    while(i<len(leftarr)):
        q[k]= leftarr[i]
        i += 1
        k += 1
    while j < len(rightarr):
        q[k] = rightarr[j]
        j += 1
        k += 1   
arr = [ 12, 11, 13, 5,-9,9876,8,20,5] 
mergsort(arr,len(arr))
print(arr)

总结系列:

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值