部分排序算法python实现

看了下算法导论,再加上最近在学习python,就用python把部分排序的算法实现下,供大家参考。

插入排序

def InsertSort( A ):
    for j in range(1,len(A)):
        key=A[j]
        i=j-1;
        while (i>0 and A[i]>key): 
            A[i+1]=A[i];
            i-=1;
        A[i+1]=key
    return A

合并排序

def Merge(A,p,q,r):
    L=A[p:q+1]
    R=A[q+1:r+1]
    L.append('Inf')
    R.append('Inf')
    i=0;
    j=0;
    for k in range(p,r+1):
        if L[i]<R[j]:
            A[k]=L[i]
            i+=1
        else: 
            A[k]=R[j]
            j+=1;
    return A
def MergeSort( A,p,r ):
    if p<r:
        q=int((p+r)/2)
        MergeSort(A,p,q)
        MergeSort(A,q+1,r)
        Merge(A,p,q,r)
    return A

冒泡排序

def BubbleSort( A ):
    for i in range(0,len(A)):
        for jt in range(1,len(A)-i):
            j=len(A)-jt
            if A[j]<A[j-1]:
                temp=A[j]
                A[j]=A[j-1]
                A[j-1]=temp
    return A

堆排序

def Left( i ):
    return i*2+1
def Right( i ):
    return (i+1)*2
def maxHeapify( A,i ,heapSize):
    l=Left(i)
    r=Right(i)
    if (l<=heapSize and A[l]>A[i]):
        largest=l
    else: 
        largest=i
    if (r<=heapSize and A[r]>A[largest]):
        largest=r
    if (largest!=i):
        temp=A[i]
        A[i]=A[largest]
        A[largest]=temp;
        maxHeapify(A,largest,heapSize)  
    return A
def BuildMaxHeap( A ,heapSize):
    for i in range(int(len(A)/2-1),-1,-1):
        maxHeapify(A,i,heapSize)
    return A
def HeapSort( A ):
    heapSize=len(A)-1
    BuildMaxHeap(A,heapSize)
    for i in range(len(A)-1,0,-1):
        temp=A[0]
        A[0]=A[i]
        A[i]=temp
        heapSize-=1
        maxHeapify(A,0,heapSize)
    return A

快速排序

def QuickSort( A,p,r ):
    if (p<r):
        q=Partition(A,p,r)
        QuickSort(A,p,q-1)
        QuickSort(A,q+1,r)
    return A
def Partition( A,p,r ):
    flag=random.randint(p,r)
    temp=A[r]
    A[r]=A[flag]
    A[flag]=temp
    x=A[r]
    i=p-1
    for j in range(p,r):
        if (A[j]<=x):
            i+=1
            temp=A[i]
            A[i]=A[j]
            A[j]=temp
    temp=A[i+1]
    A[i+1]=A[r]
    A[r]=temp
    return i+1

桶排序

def BucketSort( A ):
    n=len(A)
    B=[]
    for i in range(0,n):
        B.append([])
    for i in range(0,n):
        B[int(n*A[i])].append(A[i])
    for i in range(0,n):
        if len(B[i])>1:
            B[i]=QuickSort(B[i],0,len(B[i])-1)
    A=[]
    for i in range(0,n):
        if len(B[i])>0:
            A.extend(B[i])
    return A

测试代码

A=[1,3,2,4,7,8,234,4234 ,324235, 5452, 32,4,2]
InsertSort(A)
print(A)
B=[1,3,2,4,7,8,234,4234 ,324235, 5452, 32,4,2]
MergeSort(B,0,len(B)-1)
print(B)
C=[1,3,2,4,7,8,234,4234 ,324235, 5452, 32,4,2]
BubbleSort(C)
print(C)
D=[1,3,2,4,7,8,234,4234 ,324235, 5452, 32,4,2]
HeapSort(D)
print(D)
E=[1,3,2,4,7,8,234,4234 ,324235, 5452, 32,4,2]
QuickSort(E,0,len(E)-1)
print(E)
F=[]
for i in range(0,10):
    F.append(random.random())
F=BucketSort(F)
print F
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值