python十大排序---归并排序

一、归并排序思想:
(1) 归并排序的思想:
  归并排序的思想就是:首先将原始数组对半切分,然后将所切成的两个子数组再次切分,直到所切分的子数组只有1个元素为止;在此基础上,先创建一个临时数组,再将最后只有1个元素的子数组进行排序,排完序之后将所切成的两个子数组进行合并到临时数组中,,最后将临时数组中的值再重新赋值到原始数组对应的位置中;之后,再返回最终切分操作之前的切分操作,并做相同的操作,对两子数组进行合并;以此类推,直到返回到原始数组所切分成两个子数组为止,并最终合并成有序的数组。所以,该方法采用递归方法比较简单。
为了更好地理解该排序算法,我们来看以下图片:

在这里插入图片描述
二、代码实现:

归并排序:

1.从下往上—分解 将待排序的数列拆分成长度为1 的子数列:递归思想

def merge_sort(arr):
if len(arr)==1:
return arr
num=len(arr)//2
left=merge_sort(arr[:num])
right=merge_sort(arr[num:])
return merge(left,right)

2.从上往上—合并 比较长度为1 的子数列 两两合并----将已排序的两个子区间归并为一个有序的区间:

def merge(left,right):
l,r=0,0
result=[]
while l<len(left) and r<len(right):
if left[l]<right[r]:
result.append(left[l])
l+=1
else:
result.append(right[r])
r+=1
result+=left[l:]
result+=right[r:]
print(result)
return result

调用函数:

if name == ‘main’:
arr=[7,4,3,2,5,1]
merge_sort(arr)

猜你喜欢

转载自blog.csdn.net/charuiyu/article/details/86469090
今日推荐