您的位置:首页 > 其它

合并排序实现和分析

2016-04-17 15:04 302 查看
void copy(int *A, int *B, int i, int j)

{

 
for (int k = i; k < j; k++)
{

B[k - i] = A[k];
 
}
 

}

void merger(int *p,int n)

{
cout << n << endl;
if (n>1)
{
int b = n / 2;
int c = ceil(n / 2);

//向上取整+向下取整=n
int *B = new int[b];
int *C = new int[c];

 
copy(p, B, 0, b);

copy(p, C, c, n );

merger(B,b);
merger(C,c);

//开始把BC合并在一起。

int bhead = 0,chead=0;
 
for (int i = 0; i < n; i++)
{
if (B[bhead]<=C[chead])


p[i] = B[bhead];
bhead++;
}
else
{
 
p[i] = C[chead];
chead++;

}
if (bhead == b|| chead == c )
{
if (bhead == b )
{
for (int k = i + 1; k < n;k++)
{
if (chead == c)
break;
p[k] = C[chead++];

}

}
else
{
for (int k = i + 1; k < n; k++)
{
if (bhead == b)
break;
p[k] = B[bhead++];

}
}

break;

}

}

}

}

int _tmain(int argc, _TCHAR* argv[])

{
int n;

int A[] = {4,4,1,2,4,1,4,1};
for (int i = 0; i < 8; i++)
{
cout << A[i];
}

cout << endl;
merger(A, 8);

for (int i = 0; i < 8; i++)
{
cout << A[i];
}

    
 
cin >> n;

return 0;
}

分析过程:用到的算法思想分治法,分治法的算法效率公式 T(n)=a*T(n/b)+f(n).这里a=b=2.根据公式,效率为nlog(n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: