冒泡排序:
时间最优 O(n),最坏O(n2),稳定
def bubble(alist):
n = len(alist)
for j in range(n-1):
for i in range(n-1-j):
if alist[i]> alist[i+1]
alist[i],alist[i+1] = alist[i+1],alist[i]
选择排序:
时间最优=最坏=O(n2),不稳定
def select_sort(alist):
n =len(alist)
for i in range(n-1):
min_index = i
for j in range(i+1,n):
if alist[j]<alist[min_index]:
mid_index = j
if min_index != i
alist[min_index],alist[i] = alist[i],alist[min_index]
插入排序:
时间最优O(n),最坏O(n2) 稳定
def insert_sort(alist):
n = len(alist)
for i in range(1,n):
for j in range(i,0,-1):
if alist[j]<alist[j-1]:
alist[j] ,alist[j-1] = alist[j-1],alist[j]
快速排序:
时间最优O(nlogn),最坏O(n2) 不稳定
def quick_sort(alist,start,end):
if start>=end:
return
mid = alist[start]
low = start
high = end
while low < high:
while low<high and alist[high]>=mid:
high -=1
alist[low] = alist[high]
while low <high and alist[low] < mid:
low +=1
alist[high] = alist[low]
alist[low] = mid
quick_sort(alist,start,low-1)
quick_sort(alist,low+1,end)
二分查找(递归):
def binary_search(alist,item):
n = len(alist)
start = 0
end = n-1
if n >0:
mid = (start+end) //2
if alist[mid]==item:
return True
elif item <=alist[mid]:
return binary_search(alist[:mid],item)
else:
return binary_search(alist[mid+1:],item)
else:
return False