看了下算法导论,再加上最近在学习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