2021-10-15:合并两个有序的数组

2021年10月15日

学习内容:合并两个有序的数组

时间复杂度:O(n)
代码示例(1)

int* MergeTwoArr(int arr[], int len_a, int brr[], int len_b)
{
	if (arr == NULL || brr == NULL)
		return NULL;
	if (len_a <= 0 || len_b <= 0)
		return NULL;
	int* crr = (int*)malloc(sizeof(int) * (len_a + len_b));
	if (crr == NULL) return NULL;
	memset(crr, 0, sizeof(int) * (len_a + len_b));
	int i = len_a - 1;
	int j = len_b - 1;
	int k = len_a + len_b - 1;

	while (i >= 0 && j >= 0)
	{
		if (arr[i] > brr[j])
		{
			crr[k--] = arr[i--];
		}
		else
		{
			crr[k--] = brr[j--];
		}
	}

	while (i >= 0)
	{
		crr[k--] = arr[i--];
	}	
	while (j >= 0)
	{
		crr[k--] = brr[j--];
	}	

	return crr;
}

void Test()
{
	int arr[] = { 1, 3, 5, 7, 9, 11 };
	int brr[] = { 2, 4, 6, 8, 10, 12 };
	int len_a = sizeof(arr) / sizeof(arr[0]);
	int len_b = sizeof(brr) / sizeof(brr[0]);
	int * crr = MergeTwoArr(arr, len_a, brr, len_b);
	for (int i = 0; i < len_a + len_b; i++)
	{
		printf("%d ", crr[i]);
	}
	printf("\n");
}

int main()
{
	Test();
	return 0;
}

运行结果:
2021-10-15:合并两个有序的数组

上一篇:直接插入排序与希尔排序


下一篇:8.18Go之变量作用域