前几天看了下《编程珠玑》,里面提到归并排序算法,用来做磁盘文件排序的。最近又想写博客的想法,又不知从何处开始,所幸,就从这个算法聊起吧。以输出作为学习的目的,兴许会加深对算法的理解,多少打下些基础,以备不时执行。
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)