功能: 将两个整型数组按照升序合并,并且过滤掉重复数组元素
输入:int * pArray1 :整型数组1
int iArray1Num:数组1元素个数
int * pArray2 :整型数组2
int iArray2Num:数组2元素个数
输出:int * pOutputArray:合并后的数组
int * iOutputNum:合并后数组元素个数
返回:void
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include "OJ.h"
#define N 1000
int cmp1(const void *a, const void *b) //从小到大
{
return(*(int *)a - *(int *)b);
}
/* 删除数组中重复的元素,返回剩下的元素个数*/
int delete_elem(int arr[], int n)
{
int i, j, k;
int cnt = 0;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n;)
{
if (arr[i] == arr[j])
{
for (k = j; k<n - 1; k++)
{
arr[k] = arr[k + 1];
}
n--;
}
else
{
j++;
}
}
}
return n;
}
/*
功能: 将两个整型数组按照升序合并,并且过滤掉重复数组元素
输入:int * pArray1 :整型数组1
int iArray1Num:数组1元素个数
int * pArray2 :整型数组2
int iArray2Num:数组2元素个数
输出:int * pOutputArray:合并后的数组
int * iOutputNum:合并后数组元素个数
返回:void
*/
void CombineBySort(int * pArray1, int iArray1Num, int * pArray2, int iArray2Num, int * pOutputArray, int * iOutputNum)
{
int icnt = 0;
int jcnt = 0;
int cnt = 0;
int i = 0;
int total = iArray1Num + iArray2Num;
int *temp = (int *)malloc(sizeof(int) * (total + 1) );
if (temp == NULL)
{
return;
}
memset(temp, 0, sizeof(int) * (total + 1));
if (pArray1 == NULL || pArray2 == NULL || iArray1Num == 0 || iArray2Num == 0)
return;
for (icnt = 0; icnt < iArray1Num; icnt++)
{
temp[icnt] = pArray1[icnt];
}
for (jcnt = 0; jcnt < iArray2Num; jcnt++)
{
temp[iArray1Num + jcnt] = pArray2[jcnt];
}
/* 库函数qsort排序*/
qsort(temp, iArray2Num + iArray1Num, sizeof(temp[0]), cmp1);
cnt = delete_elem(temp, total);
*iOutputNum = cnt;
memcpy(pOutputArray, temp, sizeof(int) * cnt);
if (temp != NULL)
{
free(temp);
temp = NULL;
}
return;
}