【LeetCode】88. Merge Sorted Array
题目:
给定两个已经排序的整数数组nums1和nums2,将nums2合并到nums1中,使之成为一个有序的数组。
nums1和nums2中的元素个数分别为m和n,nums1中有足够的空间来存放nums2中的元素。
思路:
构造一个大小为m+n的数组arr,然后开始遍历nums1(用nums1[i]表示)和nums2(用nums2[j]表示),
如果nums1[i] < nums2[j],就把nums1[i]填入arr中,否则将nums2[j]填入arr中;
如果nums1和nums2中有一个已经遍历完了,就把另一个数组剩下的元素直接填入arr。
最后把arr中的元素回填入nums1,完毕。
#include <stdio.h>
#include <stdlib.h>
void merge(int* nums1, int m, int* nums2, int n) {
int* arr = malloc(sizeof(int) * (m+n));
int i = 0, j = 0, k = 0;
while (i<m && j<n) {
if (nums1[i] < nums2[j]) {
arr[k] = nums1[i];
i++;
}
else {
arr[k] = nums2[j];
j++;
}
k++;
}
while (i < m) {
arr[k] = nums1[i];
i++; k++;
}
while (j < n) {
arr[k] = nums2[j];
j++; k++;
}
for (i=0; i<k; i++)
nums1[i] = arr[i];
}
int main()
{
int nums1[100] = {3, 5, 7, 11, 23};
int nums2[4] = {1, 4, 9, 10};
merge(nums1, 5, nums2, 4);
for (int i=0; i<9; i++) {
printf("%d ", nums1[i]);
}
printf("\n");
return 0;
}
结果:
效率还是很不错的。
其实用插入排序也是可以的,但是效率比较低。
参考:一起玩算法03
推荐一位干货up主:正月点灯笼
少一些功利主义的追求,多一些不为什么的坚持