Sorting Algorithms
Recursion
分析要点是: Base Case: Smallest Problem to Solve & Recursive Rule: How to make a problem smaller
a^b
首先base case 是 b = 0 和 b = 1这两种情况,我们把问题不断拆分,即 2^1000 = 2^500 * 2^500
public int pow(int a, int b){
if(b == 0){
return 1;
}
if(b == 1){
return a;
}
int halfResult = pow(a, b / 2);
if(b % 2 == 0){
return halfResult * halfResult ;
}else{
return halfResult * halfResult * a
}
}
由于不断把pow进行拆分,所以这里时间复杂度为O(log b), 空间为 O(log b)Merge Sort
merge sort 就是把一个数组不断分拆分,直到拆为两两比较,再把它们合起来
3,1,5,7,9,8,6,4,2,0
31579 86420 O(1) 这个是找到中点,并把数组分为两类所需要的时间
315 79 864 20 O(2)
31 5 7 9 86 4 2 0 O(4)
因此,分开的时间是 1 + 2 + 4 + ... + n/2 = O(n) (对这个式子+1 -1 即可)
而需要的空间则是 n + n/2 + n/4 + .... + 1 = O(n)
完成分割之后,则进行合并,每次合并的总时间为O(n), 在这里我们被分割为logn 层,所以总的合并时间为O(nlogn)
Quick Sort
Last updated
Was this helpful?