第二章 合并排序-分治算法
来源:互联网 发布:戴笠 毛人凤 知乎 编辑:程序博客网 时间:2024/04/19 16:07
/*
* p,q,r是下标,满足p<=q<r,假设子糨能a[p..q]与a[q+1..r]已经排好序
* 将两个合并排好序代替当前子数组A[p..r]
* Running time: O(n) n = r-q+1 ÊÇÁœŽýºÏ²¢×ÓÊý×éÔªËصĞöÊýºÍ
*/
void merge(int a[], int p, int q, int r)
{
int *left, *right;
int n1, n2, i, j, k;
n1 = q - p + 1;
n2 = r - q;
left = (int *)malloc(sizeof(int) * (n1+1));
if (left == NULL)
return ;
right = (int *)malloc(sizeof(int) * (n2+1));
if (right == NULL) {
free(left);
return ;
}
for (i = p, n1 = 0; i <= q; ++i, ++n1)
left[n1] = a[i];
for (i = q+1, n2 = 0; i <= r; ++i, ++n2)
right[n2] = a[i];
left[n1] = MAXVAL;
right[n2] = MAXVAL;
i = j = 0;
for (k = p; k <= r; ++k) {
if (left[i] < right[j])
a[k] = left[i++];
else
a[k] = right[j++];
}
free(left);
free(right);
}
/* 递归调用
* O(nlgn)
*/
void merge_sort(int a[], int p, int r)
{
int q;
if (p < r) {
q = (p + r) / 2;
merge_sort(a, p, q);
merge_sort(a, q+1, r);
merge(a, p, q, r);
}
}
* p,q,r是下标,满足p<=q<r,假设子糨能a[p..q]与a[q+1..r]已经排好序
* 将两个合并排好序代替当前子数组A[p..r]
* Running time: O(n) n = r-q+1 ÊÇÁœŽýºÏ²¢×ÓÊý×éÔªËصĞöÊýºÍ
*/
void merge(int a[], int p, int q, int r)
{
int *left, *right;
int n1, n2, i, j, k;
n1 = q - p + 1;
n2 = r - q;
left = (int *)malloc(sizeof(int) * (n1+1));
if (left == NULL)
return ;
right = (int *)malloc(sizeof(int) * (n2+1));
if (right == NULL) {
free(left);
return ;
}
for (i = p, n1 = 0; i <= q; ++i, ++n1)
left[n1] = a[i];
for (i = q+1, n2 = 0; i <= r; ++i, ++n2)
right[n2] = a[i];
left[n1] = MAXVAL;
right[n2] = MAXVAL;
i = j = 0;
for (k = p; k <= r; ++k) {
if (left[i] < right[j])
a[k] = left[i++];
else
a[k] = right[j++];
}
free(left);
free(right);
}
/* 递归调用
* O(nlgn)
*/
void merge_sort(int a[], int p, int r)
{
int q;
if (p < r) {
q = (p + r) / 2;
merge_sort(a, p, q);
merge_sort(a, q+1, r);
merge(a, p, q, r);
}
}
- 第二章 合并排序-分治算法
- 分治算法-合并排序
- 分治算法—合并排序
- 分治算法之合并排序
- 第二章 算法入门 合并排序
- 【算法导论】 第二章 插入排序、分治排序
- 分治--合并排序
- 算法中分治策略实现合并排序
- 合并排序/归并排序(递归与分治)-算法设计与分析
- 学习《算法导论》第二章 合并排序 总结
- 算法(分治)合并排序和快速排序
- 排序算法大集锦_合并排序_1(分治思想)
- 算法导论2.3MERGE-SORT(分治或者合并排序算法)
- 分治法合并排序
- 合并排序,分治思想
- 分治合并排序
- 分治法--合并排序
- 合并排序(分治)
- 2012年11月14日心情记录
- Understanding the Java ClassLoader part.1 (认识JAVA中的ClassLoader )
- Android开发网
- 网络管理工具hyperic hq监控apache的配置
- Javascript中的this
- 第二章 合并排序-分治算法
- C++混合运算的类型提升和溢出
- ubuntu 安装 jdk
- Java实现快速排序
- 数字格式化DecimalFormat 总结
- Android 下禁掉DHCP服务的方法
- wireshark表达式 02
- 挖坑中....urlencode
- SharePoint 2010与PerformancePoint集成