Chinaunix首页 | 论坛 | 博客
  • 博客访问: 641063
  • 博文数量: 54
  • 博客积分: 3812
  • 博客等级: 上校
  • 技术积分: 992
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-16 20:53
文章分类

全部博文(54)

文章存档

2010年(10)

2009年(24)

2008年(20)

分类: C/C++

2009-03-16 14:59:31

    数组归并在归并排序中有很重要的作用。下面代码实现了将两个排序数据进行归并,以合成为一个更大的排序数组。
 

#include <stdio.h>
#include <stdlib.h>

void merge(int c[], int a[], int n, int b[], int m)
{
    int i, j, k;
    for (i = 0, j = 0, k = 0; k < n+m; k++)
    {
        if (i == n)
        {
            c[k] = b[j++];
            continue;
        }
        if (j == m)
        {
            c[k] = a[i++];
            continue;
        }
        if (a[i] < b[j])
        {
            c[k] = a[i];
            i++;
        }
        else
        {
            c[k] = b[j];
            j++;
        }
    }
}

int main()
{
    int a[] = {1, 20, 24, 42, 200, 10412};
    int b[] = {2, 32, 53, 120, 322, 922, 4321};

    int *c;
    int len = sizeof(a)/sizeof(a[0]) + sizeof(b)/sizeof(b[0]);
    c = (int *)malloc(len);
    if (c == NULL)
    {
        printf("malloc error\n");
        return -1;
    }

    merge(c, a, sizeof(a)/sizeof(a[0]), b, sizeof(b)/sizeof(b[0]));

    int i;
    for (i = 0; i < len; i++)
        printf("%d ", c[i]);
    printf("\n");
    return 0;
}

阅读(2647) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~