目录
前言
今天,想了很多。当两个数组长度一样时,当两个数组长度不相等时,归并的时候又需要注意哪些情况。所以,当你看到一个人在那儿待着一动不动,静静坐着,请不要打扰他,他也许正在思考代码如何实现呢!
今天实现的内容是:如何将两个有序的数组归并到一个数组中。
概述
归并的前提是,这两个数组中的元素都是有序的。以下内容都以此为前提展开讲解。
第一个数组元素:
第二个数组元素:
开辟能够容纳以上两个数组大小的第三个数组,然后对数组一与数组二中的元素依次比较大小,将较小元素依次存储到第三个数组中,直到全部比较结束:
源码:
void incorporate(int* sourceHead1, unsigned int sourceCnt1, int* sourceHead2, unsigned int sourceCnt2, int*dest)
{
int source1Cnt = 0;
int source2Cnt = 0;
for (int i = 0; i < sourceCnt1 + sourceCnt2; ++i)
{
if (source1Cnt >= sourceCnt1&&source2Cnt <sourceCnt2)
{
*(dest + i) = *(sourceHead2 + source2Cnt);
source2Cnt++;
continue;
}
else if (source2Cnt >= sourceCnt2&&source1Cnt <sourceCnt1)
{
*(dest + i) = *(sourceHead1 + source1Cnt);
source1Cnt++;
continue;
}
if (*(sourceHead1 + source1Cnt)>*(sourceHead2 + source2Cnt))
{
*(dest + i) = *(sourceHead2 + source2Cnt);
source2Cnt++;
}
else
{
*(dest + i) = *(sourceHead1 + source1Cnt);
source1Cnt++;
}
}
}
主函数:
#include<stdio.h>
#include<iostream>
using namespace std;
#include"dataStructAPI.h"
#include"sort.h"
#include<windows.h>
int main()
{
int array1[5] = { 2, 3, 5, 8, 9 };
int array2[7] = { 1,2, 4, 6, 7, 10, 13 };
int dest[12] = { 0 };
incorporate(array1, 5, array2, 7, dest);
cout << " array1 数 据 :";
numberProducer.showArray(dest, 5);
cout << " array2 数 据 :";
numberProducer.showArray(array2, 7);
cout << "归并后dest 数 据 :";
numberProducer.showArray(dest, 12);
system("pause");
return 0;
}