合并数组


提供两个无序数组,要求合并为一个有序数组,但是不能对数组进行合并再排序

思路:用归并排序算法的思想

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>

void merge(int arr1[], int arr2[], int result[], int size1, int size2) {
int i = 0, j = 0, k = 0;

// 遍历两个数组,将较小的元素放入结果数组中
while (i < size1 && j < size2) {
if (arr1[i] < arr2[j]) {
result[k++] = arr1[i++];
} else {
result[k++] = arr2[j++];
}
}

// 如果第一个数组还有剩余元素,将它们加入结果数组
while (i < size1) {
result[k++] = arr1[i++];
}

// 如果第二个数组还有剩余元素,将它们加入结果数组
while (j < size2) {
result[k++] = arr2[j++];
}
}

int main() {
int arr1[] = {12, 11, 13};
int arr2[] = {5, 7, 9, 6};
int size1 = sizeof(arr1) / sizeof(arr1[0]);
int size2 = sizeof(arr2) / sizeof(arr2[0]);
int result[size1 + size2];

// 合并两个数组
merge(arr1, arr2, result, size1, size2);

// 打印结果数组
printf("The merged sorted array is: ");
for (int i = 0; i < size1 + size2; i++) {
printf("%d ", result[i]);
}
printf("\n");

return 0;
}