慕课网 归并排序学习
1.排序思想
分而治之
2.方法
递归实现
递归终止条件: 2个数,然后排序
合并两边有序数列的方法
c++
3.时间复杂度
由于递归拆分的时间复杂度是logN 然而,进行两个有序数组排序的方法复杂度是N该算法的时间复杂度是N*logN 所以是NlogN。
python 实现方法
#!/usr/bin/python
def sort_merge(arr):
if len(arr) <=1:
return arr
len_ = len(arr)
mid = len_ / 2
left = sort_merge(arr[:mid])
right = sort_merge(arr[mid:])
return merge(left, right)
def merge(left, right):
arr = []
i = j = 0 # i is left's index, j is right's index
while i < len(left) or j < len(right):
if i == len(left):
arr.append(right[j])
j +=1
elif j== len(right):
arr.append(left[i])
i +=1
elif left[i] < right[j]:
arr.append(left[i])
i += 1
else:
arr.append(right[j])
j += 1
return arr
if __name__ == '__main__':
a = [2,3,4,5,45,63,-1,-3.-5,99,200]
print sort_merge(a)