master公式:
在编程中,递归是非常常见的一种算法,由于代码简洁而应用广泛,但递归相比顺序执行或循环程序,时间复杂度难以计算,而master公式就是用于计算递归程序的时间复杂度。
T(N) = a*T(N/b) + O(N^d);
下面对参数进行解释:
b:子过程的样本量 a:子过程的计算次数 O(N^d):子结果合并的时间复杂度 满足如上公式的程序都可以根据master公式计算时间复杂度:
log(b,a) > d :时间复杂度为O(N^log(b,a)) log(b,a) = d :时间复杂度为O(N^d * logN) log(b,a) < d :时间复杂度为O(N^d)
在学习归并排序之前,我们先学习一个简单的算法:当我们求一个值的中值时,可以使用:
int mid = L + ((R - L) » 1); 注意使用位运算更好,之后采用这种方法来计算平均数
这样可以避免内存泄露。
归并排序:
思想很简单,写一个临时数组,比较需要传入的对应元素,小的先放好,大的后放。