计算归并排序时间复杂度

本博文源于天勤数据结构

void mergesort(int i,int j){
    
    
	int m;
	if(i!=j){
    
    
		m = (i+j)/2;
		mergesort(i,m);
		mergesort(m+1,j);
		merge(i,j,m);
	}
}

merge时间复杂度在O(n) 设操作次数可为n,mergesort()基本操作可设为f(n).则有
f ( n ) = 2 f ( n / 2 ) + n   = 2 ∗ ( 2 ∗ f ( n / 4 ) + n ∗ 1 / 2 ) + n = 2 2 ∗ ( 2 ∗ f ( n / 8 ) + n ∗ 1 / 4 ) + 2 n . . . . = 2 k f ( n / ( 2 k ) ) + k n f(n)=2f(n/2)+n\ \\ =2*(2*f(n/4)+n*1/2)+n\\ =2^2*(2*f(n/8)+n*1/4)+2n\\ .... =2^kf(n/(2^k))+kn\\ f(n)=2f(n/2)+n =2(2f(n/4)+n1/2)+n=22(2f(n/8)+n1/4)+2n....=2kf(n/(2k))+kn
当n=2^k代入可得出,
f ( n ) = n + n l o n g 2 n f(n)=n+nlong_2{n} f(n)=n+nlong2n

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/123305699