使用python实现归并排序。
归并排序采用的是“分而治之”的思想,也就是将一个待排序的数列分成前后两个部分,对这两个部分分别排序后,在将这两个部分合并到一起。
其实,当我们把待排序的序列分成前后两个部分之后,我们可以调用任意的排序方法对其进行排序,然后在合并到一起。不过,在我们仍然采用归并排序法的时候,整个排序算法才叫做归并排序方法。意思也就是将两部分分成4部分,如果可以的话在分成八部分这样。
合并的时候,首先将两个排序好的部分都拿出首位比较,哪个部分的小(默认从小到大排列)就选哪个出来,然后在比较这个部分的第二位数字和第一次较大的数字。
算法举例
对【9,2,5,7,0,4,8】排序。
首先是将待排序的数列进行分割。
对下面的4个小部分排序,得到【9】,【2,5】,【0,7】,【4,8】
接下来就是合并的环节,先合并【9】,【2,5】以及【0,7】,【4,8】
合并【9】,【2,5】:比较9和2,2小;然后比较9和5,5小,得【2,5,9】
合并【0,7】,【4,8】:比较0和4,0小;比较7和4,4小;比较7和8,7小。得【0,4,7,8】
最后在合并【2,5,9】和【0,4,7,8】,得到【0,2,4,5,7,8,9】
算法评价
我们可以发现,归并排序法是需要额外得空间得,不是在原有空间上进行操作的,其空间复杂度是 O ( n ) O(n) O(n)。归并排序结构上可以看成一个完全二叉树,完全二叉树的深度是 n l o g n nlogn nlogn。所以归并排序的时间复杂度是 O ( n l o g n ) O(nlogn)