1、算法思想
- 合并排序是采用分值策略实现对n个元素进行排序的算法,是分治法的一个典型应用和完美体现。它是一种平衡、简单的二分分治策略,其计算过程分为三大步:
- (1)分解:将待排序元素分成大小大致相同的两个子序列。
- (2)求解子问题:用合并排序法分别对两个子序列递归地进行排序。
- (3)合并:将排好序的有序子序列进行合并,得到符合要求的有序序列。
2、算法描述
递归形式
def mergeSort(arr,left,right):
if left < right:
mid=(left+right)/2 #分
mergeSort(arr,left,mid)
mergeSort(arr,,mid+1,right)
merge(arr,left,mid,right)
def merge(arr,left,mid,right):
n1=mid-left+1
n2=right-mid
#创建临时数组
L=arr[left:mid+1]
R=arr[mid+1:right+1]
i=0; #初始化第一个子数组的索引
j=0 #初始化第二个子数组的索引
k=left #初始化归并子数组的索引
while i<n1 and j<n2
if L[i]<=R[j]
arr[k]=L[i]
i += 1
else:
arr[k]=R[j]
j+=1
k+=1
while i<n1:
arr[k]=L[i]
i += 1
k += 1
while j<n2:
arr[k]=R[j]
j += 1
k += 1
3、算法分析
合并排序算法的时间复杂度为O(nlogn)
合并排序算法的空间复杂度为O(n)