def InsertSort(A):
'''插入排序算法:傳入一個數組,對數組進行排序'''
print('排序前的順序:',A)
length=len(A)
for i in range(1,length):#從第二個開始
key=A[i]
j=i-1
while j>=0 and A[j]>key:
A[j+1]=A[j]
j=j-1
A[j+1]=key
print('排序後的順序:',A)
#插入排序時間複雜度:n^2,空間複雜度:1,相同元素保持相對不變性(相對位置不變)
if __name__=='__main__':
listA=[1,5,7,3,4,6,7,8,9,9,15,10,4]
InsertSort(listA)
def BableSort(A):
'''冒泡排序算法:對數組進行排序'''
print('冒泡排序前的順序:',A)
length=len(A)
for i in range(1,length):
#rang=range(i)
#for j in reversed(rang):
for j in range(i,0,-1): #range逆序遍歷
if A[j-1]> A[j]:
temp=A[j]
A[j]=A[j-1]
A[j-1]=temp
print('冒泡排序後的順序:',A)
# 冒泡排序時間複雜度爲:n^2,空間複雜度1,相同元素保持相對不變性
if __name__=='__main__':
listA=[1,5,7,3,4,6,7,8,9,9,15,10,4]
BableSort(listA)
# 歸併排序,對數組進行排序
def MergeSort(alist):
print("Splitting ",alist)
if len(alist)>1:
mid = len(alist)//2#精確除法,取小於等於結果的最大整數,相當於對結果進行向下取整
lefthalf = alist[:mid]
righthalf = alist[mid:]
MergeSort(lefthalf)#遞歸調用左半部分
MergeSort(righthalf)#遞歸調用右半部分
#合併過程
i=0
j=0
k=0
while i < len(lefthalf) and j < len(righthalf):
if lefthalf[i] < righthalf[j]:
alist[k]=lefthalf[i]
i=i+1
else:
alist[k]=righthalf[j]
j=j+1
k=k+1
while i < len(lefthalf):
alist[k]=lefthalf[i]
i=i+1
k=k+1
while j < len(righthalf):
alist[k]=righthalf[j]
j=j+1
k=k+1
print("Merging ",alist)
# 歸併排序算法時間複雜度:n*lgn,空間複雜度:n,相同元素保持順序不變性
if __name__=='__main__':
listA=[1,5,7,3,4,6,7,8,9,9,15,10,4]
MergeSort(listA)
參考:http://interactivepython.org/courselib/static/pythonds/SortSearch/TheMergeSort.html