大学的算法导论课确实是混过去的,到了毕业的时候结果连个冒泡排序都不能裸写出来,只记得一些算法的基本理论,如分治法、递归、动态规划、回溯、图论、时间空间理论这些。大概知道这些排序算法的实现原理,真在纸上写出来脑子又是一团浆糊。最近在网上看到九章算法的网络课程费用是1299,团购价是799,真是狠不下心去买,也后悔大学里没好好学点算法,浪费了那些学费。
def the_min_of_lists(lists):
min = lists[0]
for i in range(1,len(lists)):
if min > lists[i]:
min,lists[i]= lists[i],min
return min
def bubble_sort(lists):
count = len(lists)
for i in range(0,count):
for j in range(i+1,count):
if lists[i]> lists[j]:
lists[i],lists[j]= lists[j],lists[i]
return lists
def insert_sort(lists):
for i in range(1,len(lists)):
key = lists[i]
j = i-1
while j>=0:
if key < lists[j]:
# key = lists[j] #这样写会改变key的值,在插入排序的过程中,key值保持不变
# lists[j+1] = lists[j]
lists[j+1]= lists[j]
lists[j]= key
j-=1
return lists
def quick_sort(lists,left,right):
if left > right:
return lists
low,high = left,right
key = lists[left]#key即是标准数
while left < right:
while left < right and lists[right]>= key:
right-=1
lists[left]= lists[right]
while left < right and lists[left]<= key:
left+=1
lists[right]= lists[left]
lists[right]= key
quick_sort(lists,low,left-1)
quick_sort(lists,right+1,high)
return lists
def select_sort(lists):
count = len(lists)
for i in range(0,count):
min = i
for j in range(i+1,count):
if lists[min]> lists[j]:
min = j
lists[min],lists[i]= lists[i],lists[min]
return lists
#归并排序用两个已拍好的序列比较排序,采用递归的方式实现
def merge_sort(lists):
if len(lists)<2:
return lists
num = len(lists)/2
left = merge_sort(lists[:num])
right = merge_sort(lists[num:])
return merge(left,right)
def merge(left,right):
i,j=0,0
result=[]
while i<len(left)and j<len(right):
if left[i]< right[j]:
result.append(left[i])
i+=1
else:
result.append(right[j])
j+=1
result += left[i:]#若比较结束,将尚未比较完的那组加到result的后面
result += right[j:]
return result
def shell_sort(lists):
gap =2
group = len(lists)/gap
while group >1:
for i in range(0,group):
j = i+group
while j < len(lists):
k = j-group
key = lists[j]
while k>=0:
if key < lists[k]:
lists[k+group]= lists[k]
lists[k]= key
k -= group
j+=group
group /= gap
return lists
#堆排序分为最大堆和最小堆,是完全二叉树。
def build_heap(lists,size):
for i in range(0,(size/2))[::-1]:
adjust_heap(lists,i,size)
def adjust_heap(list,i,size):
lchild =2*i+1
rchild =2*i+2
max = i
if i < size/2:
if lchild<size and list[lchild]> list[max]:
max = lchild
if rchild<size and list[rchild]> list[max]:
max = rchild
if max!=i:
list[max],list[i]= list[i],list[max]
adjust_heap(list,max,size)
def heap_sort(lists):
size = len(lists)
build_heap(lists,size)
for i in range(0,size)[::-1]:
lists[0],lists[i]= lists[i],lists[0]
adjust_heap(lists,0,i)
原文:http://www.cnblogs.com/fengmanlou/p/4841858.html