面試題整理-合併數組

題意:


需要將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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章