部分排序算法python实现

来源:互联网 发布:java.io jar包下载 编辑:程序博客网 时间:2024/06/06 13:14

看了下算法导论,再加上最近在学习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 Adef 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+1def Right( i ):    return (i+1)*2def 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 Adef BuildMaxHeap( A ,heapSize):    for i in range(int(len(A)/2-1),-1,-1):        maxHeapify(A,i,heapSize)    return Adef 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 Adef 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
0 0
原创粉丝点击