一、归并排序思想:
(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)
本文深入讲解了归并排序算法的基本思想及其实现过程。通过递归将数组不断切分为更小的子数组,直至每个子数组仅包含一个元素,然后通过比较合并这些子数组,最终得到完全有序的数组。文章提供了详细的代码示例,帮助读者理解和掌握归并排序的精髓。
3683

被折叠的 条评论
为什么被折叠?



