排序思路
利用分治的思想,将数组从中间拆分,比较,再合并,
递推公式 merge_sort(left...right)=merge_sort(merge_sort(left...middle),merge_sort(middle+1...right))
终止条件
left >= right
时间复杂度分析
对n个元素进行排序需要时间为T(n),拆分数组后两个数组的排序的时间为T(2n)
merge_sort_B中合并数组的时间复杂度是O(n)
归并排序的时间复杂度的计算公式为
T(1) = C -> n=1的时候,时间复杂度为常量级的执行时间
T(n) = 2*T(n/2) + n
= 4*T(n/4) + 2*n
= 8*T(n/8) + 3*n
= ...
= 2^k *T(n/2^k)+ k*n.
当 T(n/2^k) = T(1) ---> n/2^k = 1 ---> k = log以2为底n的对数 ---> k= log(n)/log(2)
将k代入上面的公式 T(n) = Cn + n * (log(n)/log(2))
减去常量Cn和log(2)之后
O(n*log(n)) = O(nlogn)
--------------------------
空间复杂度分析
在merge_sort_B每次执行的时候都会创建一个临时数组other
但是因为每次和并完成之后other会被释放
所以只需要一个临时空间并且大小不会超过n个数据的大小
这样空间复杂度就为O(n)