时间复杂度是程序运行的时间,也可以说是次数;
空间复杂度是程序占用的空间;
6.归并排序
时间复杂度的计算:
二分查找/快排/归并,有一个共同的特点,就是将数据分为2堆。
2t = n => t = log2(n)
快排和归并每一次都要比较n次,所以时间复杂度= n*log2(n)
归并比较:只需要接着前一个数字比较就行,每一层总共比较n次。
快排比较:每一层总共和n个数字进行比较。

# coding: utf-8
def MergeSort(lists):
if len(lists) <= 1:
return lists
num = int( len(lists)/2 )
# 从中间,进行数据的拆分, 递归的返回数据进行迭代排序
left = MergeSort(lists[:num])
right = MergeSort(lists[num:])
print left
print "*"*20
print right
print "_"*20
return Merge(left, right)
def Merge(left,right):
r, l=0, 0
result=[]
while l<len(left) and r<len(right):
if left[l] < right[r]:
result.append(left[l])
l += 1
else:
result.append(right[r])
r += 1
result += right[r:]
result += left[l:]
print 'result:', result
return result
print MergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45])