合并排序实现和分析
来源:互联网 发布:步进电机选型软件 编辑:程序博客网 时间:2024/06/15 07:38
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)
0 0
- 合并排序实现和分析
- PHP实现归并排序(合并排序)--算法原理分析
- 合并排序的分析
- 算法设计与分析 合并排序的递归实现算法
- c++实现合并排序
- 分冶法实现合并排序
- 合并排序 算法实现
- 合并排序实现
- 递归实现合并排序
- python实现合并排序
- 合并排序 C++实现
- 合并排序实现
- 合并排序java实现
- scala数据结构和算法-01-用scala实现合并排序
- 算法分析与设计实验 分治策略 两路合并排序和快速排序
- 合并排序的c++实现
- 非递归实现合并排序
- 合并排序的Ruby实现
- PHP之array_keys()获取数组键名
- AndroidStudio的adb启动问题
- 第一集:机器学习的动机与应用
- Unexpected error while running MyBatis Generator. Cannot resolve classpath entry: mysql-connector-ja
- mysql的DDL操作
- 合并排序实现和分析
- ECMAScript继承机制实现
- 科学美国人60秒:研究显示黑洞碰撞合并或将对引力波产生影响
- 机器学习方法总结
- Spark性能相关参数配置 之 Storage相关配置参数
- GridView.PagerTemplate 属性
- 第八周项目1 数组做数据成员
- 【Django基础入门】Breadcrumbs导航栏
- 某些函数的递归与非递归实现的比较