面试题整理-合并数组

来源:互联网 发布:php社区源码 编辑:程序博客网 时间:2024/06/05 02:07

题意:


需要将A,B两个已排序数组合并至A数组中,假设A数组中的空间是够用的。那么请写这么一个合并函数。

当然,最后的结果也一定是有序的。

解题:

很好写。直接从后面开始向前合并


#include <stdio.h>#include <stdlib.h>#include <string.h>int a[4096];int b[4096];int _cmp(const void *a, const void *b) {int x = (int)(*(int *)a);int y = (int)(*(int *)b);return x - y;}void create(int *a, int *b, int *l, int *m) {int alen = rand() % 1024 + 1;int blen = rand() % 1024 + 1;int i = 0;for (i = 0; i < alen; ++i) {a[i] = rand() % 4096;b[i] = rand() % 4096;}qsort(a, alen, sizeof(int), _cmp);qsort(b, blen, sizeof(int), _cmp);*l = alen; *m = blen;}int merge(int *a, const int *b, int alen, int blen) {int len = alen + blen + 2, dst = alen + blen;while (alen >= 0 || blen >= 0) {if (blen < 0 || (alen >= 0 && a[alen-1] >= b[blen-1])) a[--len] = a[--alen];else a[--len] = b[--blen];}return dst;}int main(void) {int alen, blen, len;int i = 0;create(a, b, &alen, &blen);len = merge(a, b, alen, blen);for (i = 0; i < len; ++i) {printf("%d ", a[i]);}return 0;}