大学的算法导论课确实是混过去的,到了毕业的时候结果连个冒泡排序都不能裸写出来,只记得一些算法的基本理论,如分治法、递归、动态规划、回溯、图论、时间空间理论这些。大概知道这些排序算法的实现原理,真在纸上写出来脑子又是一团浆糊。最近在网上看到九章算法的网络课程费用是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],minreturn mindef 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 listsdef insert_sort(lists):for i in range(1,len(lists)): key = lists[i] j = i-1while 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-=1return listsdef 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 listsdef select_sort(lists): count = len(lists)for i in range(0,count): min = ifor 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+=1else: result.append(right[j]) j+=1 result += left[i:]#若比较结束,将尚未比较完的那组加到result的后面 result += right[j:]return resultdef shell_sort(lists): gap =2 group = len(lists)/gapwhile group >1:for i in range(0,group): j = i+groupwhile 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 /= gapreturn 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 = iif i < size/2:if lchild<size and list[lchild]> list[max]: max = lchildif rchild<size and list[rchild]> list[max]: max = rchildif 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