#include <stdio.h>
#define INFINITY 999999
#define LEN(A) ((sizeof (A)) / (sizeof A[0])) void print_array(int A[], int len)
{
int i;
/*
int len = LEN(A);
sizeof on array function parameter will return size of 'int *' instead of 'int []'
[-Wsizeof-array-argument]
int len = LEN(A);
^
*/
for (i = 0; i < len; i++)
printf("%d, ", A[i]);
putchar('\n');
}
//merge将本次合并的两个array分别打印
void merge(int A[], int p, int q, int r)
{
int k, i, j;
int n1 = q - p + 1;
int n2 = r - q;
int L[n1+1], R[n2+1]; for (i = 0; i < n1; i++)
L[i] = A[p+i];
L[n1] = INFINITY;
print_array(L, n1+1); for (j = 0; j < n2; j++)
R[j] = A[q+1+j];
R[n2] = INFINITY;
print_array(R, n2+1); i = j = 0;
for (k = p; k <= r; k++) {
if (L[i] <= R[j]) {
A[k] = L[i];
i++;
} else {
A[k] = R[j];
j++;
}
}
} void mergeSort(int A[], int p, int r)
{
if (p < r) {
int q = (p+r)/2;
mergeSort(A, p, q);
mergeSort(A, q+1, r);
merge(A, p, q, r);
}
} int main(int argc, char *argv[])
{
int A[] = {5, 6, 7, 8, 9, 10, 11, 12, 12, -3, 1, 2, 3, 4};
merge(A, 0, 8, 13);
print_array(A, LEN(A)); int B[] = {2, 4, 5, 7, 1, 3, 2, 6};
mergeSort(B, 0, LEN(B)-1);
print_array(B, LEN(B)); return 0;
}

最新文章

  1. openstack学习(二)虚拟机XML文件
  2. VB6.0调用DLL
  3. 第二次正式java web开发项目的总结(回收站恢复)
  4. Android--数据持久化之内部存储、Sdcard存储
  5. HDU 5114 Collision
  6. css背景渐变兼容(兼容所有ie)
  7. Beam me out!
  8. C字符串处理函数
  9. 【LCA求最近公共祖先+vector构图】Distance Queries
  10. 使用 Homebrew 安装 Git
  11. rabbitmq官方的六种工作模式
  12. jenkins git 之 Advanced clone behaviours
  13. Mayor&#39;s posters POJ - 2528(线段树 + 离散化)
  14. EntityFramework 多数据库链接,MySql,SqlServer,Oracel等
  15. query多选下拉框插件 jquery-multiselect(修改)
  16. linux系统信息查询及相关概念
  17. FastDFS 安装步骤
  18. 20145310《Java程序设计》第3周学习总结
  19. .netcore2.0 发布CentOS7
  20. Python字符串中的r前缀

热门文章

  1. 将python2.7项目转为Python3问题记录
  2. C# Post调用接口并传递json参数
  3. vue table刷新单行数据
  4. Wifi Display
  5. iOS 静态库与动态库的区别
  6. 杭电oj 进制转换
  7. Minio客户端工具mc
  8. datax在win10中的安装
  9. Oracle —— 对表数据操作的各种小Tip
  10. PYTHON中的CONCURRENT.FUTURES模块