基础算法篇之并归排序

每日一个算法之并归排序

 

      1  并归排序的原理可以结合图形来看,大致的思想是先分后并,先将大的数组按照中间分组,之后将分开后的左右数组继续分组,直到分开的数组只有一个,之后再将小的数组比较大小,交换位置合并,直到合并成之前的数组

 

                                  

                 1 从第一行到第三行很好理解,就是分的过程,不断的对数组进行中分,直到分到最小粒度,不能再进行分割了为止

                                  2 第一阶段结束之后,进入第二阶段,对已经分割的数据进行合并,此时比较方法是这样的,分别对左边右边定义一个指针,然后创建一个空列表,比较左右数组的当前指针大小,小的就加入空列表里面

                                    并且之后指针往后前进一个,直到左右其中一个数组被遍历完,将另一个数组的所有值加入result,完成一次合并,之后持续递归直到所有的数组递归结束,完成排序

 

 

  2  代码实现

 

    

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 并归排序 def mergeSort(list): listLength
= len(list) if listLength <= 1:
     # 定义分的结束条件  
return list mid = listLength // 2 leftList = mergeSort(list[:mid]) rightList = mergeSort(list[mid:]) leftPoint = rightPoint = 0

# 归逻辑 result = []
# 每一次归运算
while leftPoint < len(leftList) and rightPoint < len(rightList): if leftList[leftPoint] < rightList[rightPoint]: result.append(leftList[leftPoint]) leftPoint += 1 else: result.append(rightList[rightPoint]) rightPoint += 1
# 当其中一个遍历完之后将另外一个也加入里面
result += leftList[leftPoint:] result += rightList[rightPoint:]
# 记录每次合的result print(result)
return result if __name__ == '__main__': mergeSort([1, 4, 3, 5, 2, 7, 6, 8])

 

 

   3 执行过程

  

 

posted @ 2021-12-24 16:41  伊铭(netease)  阅读(101)  评论(0编辑  收藏  举报