#include<stdio.h> //Merge Sorted Array
/*
算法思想:
利用插入排序的算法思想,依次遍歷nums2中的每一個元素,並將其插入到有序的nums1中
*/
void merge(int* nums1, int m, int* nums2, int n)
{
int i, j, k;
i = 0; j = 0;
while (j < n)
{
while (i < m&&nums1[i] <= nums2[j]) //找到第一個大於nums2[j]的元素
{
i++;
}
if (i < m)
{
for (k = m; k > i; k--) //i之後的元素後移
{
nums1[k] = nums1[k - 1];
}
nums1[i] = nums2[j]; //將j插入到i位置
j++;
m++; //m爲插入nums1中的實際現有元素
}
else
{
do
{
nums1[m++] = nums2[j++];//將nums2中的剩餘元素插入到nums1中
}while (j < n);
break;
}
}
}
int main()
{
int nums1[10] = { 1, 3, 4, 7 }; //test
int nums2[4] = { 2, 5, 6, 8 };
merge(nums1, 4, nums2, 4);
for (int i = 0; i < 8; i++)
printf("%d\n", nums1[i]);
return 0;
}
LeetCode Merge Sorted Array(合併有序數組)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.