前几天看了下《编程珠玑》,里面提到归并排序算法,用来做磁盘文件排序的。最近又想写博客的想法,又不知从何处开始,所幸,就从这个算法聊起吧。以输出作为学习的目的,兴许会加深对算法的理解,多少打下些基础,以备不时执行。
1、什么是归并排序?
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
将已有序的子序列合并,得到完全有序的序列;使每个子序列有序,在使子序列合并。
2、时间复杂度和空间复杂度是什么?
O(n*Logn) O(n)
3、用python语言如何实现?
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 def merge_sort(nums): 4 if len(nums) <= 1: 5 return nums 6 n = len(nums) 7 mid = n/2 8 res1 = merge_sort(nums[:mid]) 9 res2 = merge_sort(nums[mid:]) 10 res = merge(res1, res2) 11 return res 12 13 def merge(res1, res2): 14 i = 0 15 j = 0 16 res = [] 17 while i < len(res1) and j <len(res2): 18 if res1[i] < res2[j]: 19 res.append(res1[i]) 20 i += 1 21 else: 22 res.append(res2[j]) 23 j += 1 24 res += res1[i:] 25 res += res2[j:] 26 return res 27 28 a = [1,7,5,8,3,6,2,0,19] 29 res = merge_sort(a)