归并排序
归并排序是分治方法一个典型应用。归并排序首先是递归分散数组,再合并。将数组分解成最小之后,合并成有俩个有序的数组,基本思想就是比较两个有序数组最前面的数,谁小先去谁,然后对应的数组的指针后移一位,继续比较,直到一个数组取完为止,最后把剩余的部分全部取出。
算法分析:
Python 源代码:
class Solutions(object):
'''
这是一个归并排序算法
'''
def merge_sort(self,left,right):
'''
将两个有序的序列合并成一个有序序列
'''
i,j = 0, 0
res = []
while i < len(left) and j < len(right):
# 当两个数组都没取完时
if left[i] < right[j]:
res.append(left[i])
i += 1
else:
res.append(right[j])
j += 1
# 只要一个取完时,但是并不知道是哪一个数组
res += left[i:]
res += right[j:]
return res
def merge(self,List):
# 归并算法,递归实现
if len(List) <= 1:
return List
else:
mid = len(List)//2
left = self.merge(List[:mid])
right = self.merge(List[mid:])
return self.merge_sort(left,right)
if __name__ == "__main__":
List = [4,3,6,5,8,0,1,9,7,2]
sol = Solutions()
res = sol.merge(List)
print(res) # 结果为: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
归并排序:
时间复杂度:O(nlogn)
空间复杂度:O(n)
稳定性:稳定