结合黑马Python后期视频的学习,整理了我们常见的排序算法,整理如下:冒泡排序,希尔排序,选择排序,插入排序,归并排序,快速排序.其中不改变相同元素位置的算法称为稳定型排序算法(冒泡排序,插入排序,归并排序),改变相同元素位置的算法,称为不稳定算法,稳定型排序,.该贴就为大家介绍其中的归并算法.
归并算法,较为难理解的是其中的实现原理,调用自身递归,实现数据链的拆分.具体python代码见下:
def merge_sort(alist):
"""
归并排序
:param alist:输入的形参
:return: 返回排完序的列表
"""
n = len(alist)
if n <= 1:
return
mid = n // 2
# 掉用本身进行递归
left_list = merge_sort(alist[:mid])
right_list = merge_sort(alist[mid:])
left_cur, right_cur = 0, 0
result = []
while left_cur < len(left_list) and right_cur < len(right_list):
if left_list[left_cur] < right_list[right_cur]:
result.append(left_list[left_cur])
left_cur += 1
else:
result.append(right_list[right_cur])
right_cur += 1
result += left_list[left_cur]
result += right_list[right_cur]
return result
递归调用的出口为 n <= 1,取中间值并从索引为0和-1创建两个指针,并将其赋值为0, 用列表切片属性将获取的值分别存放到所对应的列表中,移动指针,最终将所有链路上的数据,重新进行排序
|
|